Metadata-Version: 2.4
Name: bella-domify
Version: 0.1.6.8
Summary: An Open source Pdf Parser Python library
Home-page: 
Author: ['tangxiaolong', 'luxu', 'zhangxiaojia']
Author-email: 
License: GPL v3
Keywords: document-doc_parser
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: annotated-types==0.6.0
Requires-Dist: anyio==3.7.1
Requires-Dist: boto3==1.34.19
Requires-Dist: botocore==1.34.19
Requires-Dist: certifi==2023.11.17
Requires-Dist: charset-normalizer==3.3.2
Requires-Dist: click==8.1.7
Requires-Dist: distro==1.9.0
Requires-Dist: exceptiongroup==1.2.0
Requires-Dist: fastapi==0.104.1
Requires-Dist: fire==0.5.0
Requires-Dist: fonttools==4.45.1
Requires-Dist: greenlet==3.0.3
Requires-Dist: h11==0.14.0
Requires-Dist: httpcore==1.0.2
Requires-Dist: httpx==0.26.0
Requires-Dist: idna==3.6
Requires-Dist: jellyfish==1.0.3
Requires-Dist: jmespath==1.0.1
Requires-Dist: Levenshtein==0.23.0
Requires-Dist: loguru==0.7.2
Requires-Dist: lxml==4.9.3
Requires-Dist: numpy==1.26.2
Requires-Dist: openai==1.6.1
Requires-Dist: opencv-python==4.8.1.78
Requires-Dist: packaging==23.2
Requires-Dist: pydantic==2.5.2
Requires-Dist: pydantic_core==2.14.5
Requires-Dist: PyMuPDF==1.23.6
Requires-Dist: PyMuPDFb==1.23.6
Requires-Dist: PyMySQL==1.1.0
Requires-Dist: python-dateutil==2.8.2
Requires-Dist: python-docx==1.1.0
Requires-Dist: python-multipart==0.0.6
Requires-Dist: rapidfuzz==3.6.1
Requires-Dist: requests==2.31.0
Requires-Dist: s3transfer==0.10.0
Requires-Dist: six==1.16.0
Requires-Dist: sniffio==1.3.0
Requires-Dist: SQLAlchemy==2.0.25
Requires-Dist: sqlmodel==0.0.16
Requires-Dist: starlette==0.27.0
Requires-Dist: termcolor==2.3.0
Requires-Dist: textdistance==4.6.1
Requires-Dist: tqdm==4.66.1
Requires-Dist: typing_extensions==4.8.0
Requires-Dist: urllib3==1.26.18
Requires-Dist: uvicorn==0.24.0.post1
Requires-Dist: zope.interface==6.1
Requires-Dist: pillow==10.4.0
Requires-Dist: python-pptx==0.6.23
Requires-Dist: python-docx==1.1.0
Requires-Dist: jinja2==3.1.4
Requires-Dist: shapely==2.0.5
Requires-Dist: xlrd==2.0.1
Requires-Dist: confluent-kafka==2.5.0
Requires-Dist: openpyxl==3.1.5
Requires-Dist: pytest==4.6.2
Requires-Dist: tiktoken==0.8.0
Requires-Dist: unoconv==0.9.0
Requires-Dist: bella-openapi==1.0.4
Requires-Dist: chardet==5.2.0
Dynamic: author
Dynamic: description
Dynamic: description-content-type
Dynamic: keywords
Dynamic: license
Dynamic: license-file
Dynamic: requires-dist
Dynamic: requires-python
Dynamic: summary

# document_parser

![python-version](https://img.shields.io/badge/python->=3.6-green.svg)
[中文](README.md) | [English Version](README_EN.md)

一个贝壳开源的文档解析Python库。使用Python lib包形式引入，也可以服务化方式运行，支持多种文档格式的解析和转换。

## 功能特点

### 支持多种文件格式
- PDF
- Word文档 (DOCX/DOC)
- Excel表格 (XLSX/XLS)
- CSV文件
- PowerPoint演示文稿 (PPTX)
- 文本文件
- 图片文件 

### 解析功能
- **版面解析 (Layout Parse)**：提取文档的基本布局结构，包括文本块和图片块
- **DOM树解析 (DomTree Parse)**：构建详细的文档对象模型，便于进一步处理和分析
- **Markdown转换**：将解析结果转换为Markdown格式

### 高级功能
- **图像处理**：内置使用大模型ORC能力提取图像信息功能
- **表格处理**：解析表格结构和内容
- **页眉页脚识别**：自动识别和过滤页眉页脚
- **多进程解析**：使用多进程并行处理提高解析效率
- **评测标注功能**：内含评测模块，可标注PDF解析详情
![pdf_marked](./assets/pdf_marked.png)

## 系统要求
- Python >= 3.9
- 其他依赖项（详见requirements.txt）

以服务形式启动不依赖贝壳OpenAI开源体系，但文档解析流程依赖贝壳开源的（上传的文件是数据来源）,文件数据扭转如下

![pipline](./assets/pipline.png)

Bella-Rag地址：https://github.com/LianjiaTech/bella-rag

Bella-Knowledge地址：https://github.com/LianjiaTech/bella-knowledge



## 环境配置

需要设置以下环境变量：
- OPENAI_API_KEY：用于调用OpenAI API的密钥
- OPENAI_BASE_URL：OpenAI API的基础URL
- OPENAPI_CONSOLE_KEY：需要调用OpenAI console类接口获得元信息时候默认的全局key，目前主要用来获取视觉模型列表，用户可自行实现`VisionModelProvider`返回支持视觉的模型列表

## 快速开始

### library库形式使用

1. 安装依赖

   ```shell
   pip install document_parser
   ```

2. 配置

   ```python
   parser_config = ParserConfig(image_provider=ImageStorageProvider(),
                                ocr_model_name="gtp-4o",
                                # 是否开启OCR能力
                                # 如不开启则vision_model_provider或vision_model_list不需要实现或配置
                                ocr_enable=True, 
                                vision_model_provider=OpenAIVisionModelProvider())
   parser_context.register_all_config(parser_config)
   parser_context.register_user("userId") # 请求模型时的用户ID,如果不设置会影响OCR使用
   ```

3. 执行解析
   ```python
   converter = Converter(stream=stream) # 以文件流的形式传入
   dom_tree = converter.dom_tree_parse( 
       remove_watermark=True,   # 是否开启去水印
       parse_stream_table=False # 是否解析流式表格
   )
   ```

### 服务化运行

1. 从Git下载代码

2. 启动命令

   ```bash
   uvicorn server.app:app --port 8080 --host 0.0.0.0
   ```

*也可以根据自身需要打包成docker镜像

## 优势
从下图效果测评数据可以看出贝壳自研的解析能力很强，正确率更高（基于贝壳有限测评集）

![image2](./assets/evaluation.png)



## 致谢

本项目基于 [pdf2docx](https://github.com/dothinking/pdf2docx) 进行二次开发，感谢原作者及其团队的杰出贡献。pdf2docx 是基于 PyMuPDF 提取文本、图片、矢量等原始数据。并基于规则解析章节、段落、表格、图片、文本等布局及样式等，具体功能可访问其GitHub地址。为我们的文档解析功能提供了重要的技术基础。

## 更多文章

[PDF解析： 视觉到结构的重建之旅](./assets/share.pdf)
