Open Parse:构建RAG的开源利器,一站式解决复杂文档分块难题
在文档处理的世界里,如何把复杂的文档高效地分块,一直是个绕不开的难题。高质量的文档分块是AI应用成功的基石,但不少开源工具在这块表现并不尽人意——尤其是面对结构复杂的文档时。这时候,Open Parse出现了。它力求填补这个空白,给开发者提供一个灵活易用、同时能有效分析文档布局的实用工具库。

什么是Open Parse?
简单来说,Open Parse就是一个专门用来攻克复杂文档分块难题的工具。它最特别的地方在于,不是简单地把文档转成纯文本后再切断,而是先通过视觉化的方式来分析文档——比如标题、章节、列表这些原始语义结构,它都能尽可能保留下来。传统文本分割方式往往会丢掉这些宝贵的信息。
除此之外,Open Parse还支持Markdown语法解析和高精度的表格内容提取,这些都是传统工具容易忽略或做不好的地方。总的来说,它确实让复杂文档的处理上了一个台阶,为AI应用输入的数据质量提供了更强有力的保障。
Open Parse的优势
和市面上那些文本分割、布局解析乃至商业解决方案相比,Open Parse的几项优势确实是实打实的:
视觉化驱动的文档分析:
保留原始语义结构:
支持Markdown:
高精度表格解析:
可扩展:
易用性:
开源免费,优于商业解决方案:
Open-Parse应用场景
实际应用范围也很广,比如:
语义处理:
信息提取:
文档摘要:
问答系统:
Open Parse核心代码
表格解析:openparse/tables/parse.py
这个模块的主要任务是从PDF文档中提取表格数据。它定义了多个函数和类,使用了不同的算法来实现表格解析功能:
1. 类定义:
ParsingArgs:基类,定义了基础的解析参数,包括解析算法和表格输出格式。TableTransformersArgs:继承自ParsingArgs,用于配置Table Transformer模型的参数(置信度阈值、输出格式等)。PyMuPDFArgs:继承自ParsingArgs,用于配置PyMuPDF库的参数(输出格式)。UnitableArgs:继承自ParsingArgs,用于配置Unitable模型的参数(置信度阈值、输出格式等)。
2. 函数定义:
_ingest_with_pymupdf:借助PyMuPDF库来解析表格。_ingest_with_table_transformers:使用Table Transformer模型解析表格。_ingest_with_unitable:使用Unitable模型解析表格。ingest:根据传入的parsing_args选择不同的解析算法并调用对应函数。
3. 代码逻辑:
ingest函数是整个流程的入口,它会根据传入的parsing_args选择合适的解析算法。每个解析函数都会把PDF文档转为图片,然后用对应的算法识别表格区域和内容。解析后的表格内容会被转换成指定格式(字符串、Markdown或HTML),并以TableElement对象的形式返回。
4. 技术细节:
代码使用了Pydantic进行数据验证和类型提示。Table Transformer和Unitable模型需要额外安装依赖库,比如torch、torchvision和transformers。PyMuPDF则用于PDF处理和图像转换。
Open Parse提供了三种不同的PDF表格提取方式——分别基于PyMuPDF、Table Transformer和Unitable模型,用户可以根据需要选择合适的解析算法和输出格式。
表格解析:openparse/pdf.py
这个文件定义了Pdf类,用于处理PDF文件。它整合了pypdf和pdfminer.six两个库的功能:
1. PDF文件操作:
- 读取PDF文件。
- 保存修改后的PDF。
- 提取指定页面范围的PDF内容。
- 将PDF转换为PyMuPDF(fitz)文档对象。
2. PDF页面布局分析:
- 使用pdfminer.six提取页面布局信息,包括文本块、图片等元素的位置和大小。
3. 可视化和标注:
- 在PDF页面上绘制边界框,直观显示元素位置。
- 支持用IPython展示标注后的PDF页面。
- 可以将标注后的PDF导出到文件。
4. 主要类和函数:
Pdf是核心类,封装了PDF文件操作和布局分析功能。此外还有_BboxWithColor(辅助存储边界框和颜色信息)、_random_color(生成随机颜色)、_prepare_bboxes_for_drawing(把边界框列表转为_BboxWithColor对象列表)、extract_layout_pages(使用pdfminer.six提取布局信息)、sa ve(保存PDF文件)、extract_pages(提取特定页面范围)、to_pymupdf_doc(转为PyMuPDF文档)、_draw_bboxes(绘制边界框)、display_with_bboxes(用IPython展示标注页面)、export_with_bboxes(导出标注PDF)、_flip_coordinates(坐标转换)。
5. 代码逻辑:
Pdf类初始化时会读取PDF文件并创建PdfReader和PdfWriter对象。extract_layout_pages函数通过pdfminer.six提取布局信息。display_with_bboxes和export_with_bboxes函数则通过_draw_bboxes在页面上绘制边界框,并用PyMuPDF进行可视化和导出。
6. 技术细节:
pypdf库用于PDF文件操作,pdfminer.six进行页面布局分析,PyMuPDF负责可视化和导出,IPython用于交互式显示。
Open-Parse的安装和使用
Open-Parse安装
核心库安装
pip install openparse
启用OCR支持
需要先安装Tesseract OCR,并通过设置
TESSDATA_PREFIX环境变量来指定Tesseract语言数据包的路径。
安装机器学习表格检测模型
如果想用到高精度的表格检测功能,需要额外安装Table Transformer模型:
pip install "openparse[ml]"
openparse-download
基本用例
用Open Parse非常直接,几行代码就能搞定:
import openparse
doc_path = "./sample-docs/doc.pdf"
parser = openparse.DocumentParser()
parsed_doc = parser.parse(doc_path)
for node in parsed_doc.nodes:
print(node)
语义分块处理
如果需要根据语义对节点进行分组,可以添加一个语义处理管道:
from openparse import processing, DocumentParser
semantic_pipeline = processing.SemanticIngestionPipeline(
openai_api_key=OPENAI_API_KEY,
model="text-embedding-ada-002",
min_tokens=64,
max_tokens=1024,
)
parser = DocumentParser(processing_pipeline=semantic_pipeline)
parsed_content = parser.parse(doc_path)
此外,Open Parse提供了详细的Cookbooks教程,可以帮助用户快速上手:
https://github.com/Filimoa/open-parse/tree/main/src/cookbooks
官方文档覆盖了更多高级用法:
https://filimoa.github.io/open-parse/
作为一个很有潜力的开源项目,Open Parse未来还会支持更多文档格式和功能——比如更多语言的文档解析、更复杂的文档结构(例如嵌套表格),以及更强大的语义处理(命名实体识别、关系抽取等),为下游任务提供更丰富的信息。
总之,Open Parse作为一款功能丰富的文档分块工具,可以显著提高复杂文档处理的效率,也为构建高质量的AI应用提供了有力的支撑。
-
- 关于宇宙的好的网名有哪些
- 角色扮演 | 1
- 网名