PDF解析能够提升大语言模型系统的信息处理能力和应用范围,为用户提供更加便捷、高效、个性化的服务体验。本文介绍三种常用的pdf解析方式:Open Parse
、pdfplumber
、PyMuPD
。
一、Open Parse
Open Parse是一个能够直观地识别文档布局
并有效地对其进行分块
的灵活、易于使用的库。
处理流程
将解析出来的相关元素组合在一起,形成一个连贯的结构,输出表示文档不同部分的节点。如下图所示。
默认处理流程
from openparse import DocumentParser
parser = DocumentParser()
语义辅助的处理流程
将每个节点的文本向量化,然后根据它们的相似性将它们聚类在一起。
目前只支持OpenAI API生成嵌入,但计划很快添加更多选项。
from openparse import processing, DocumentParser
semantic_pipeline = processing.SemanticIngestionPipeline(
openai_api_key=OPEN_AI_KEY,
model="text-embedding-3-large",
min_tokens=64,
max_tokens=1024,
)
parser = DocumentParser(
processing_pipeline=semantic_pipeline,
)
parsed_content = parser.parse(basic_doc_path)
表格处理流程
目前,我们提供三种从PDF中提取表格的选项:unitable, pymupdf 和 table-transformer
用法如下:
parser = openparse.DocumentParser(
table_args={...}
)
# ingesting the document
parsed_10k = parser.parse(meta10k_path)
1) Unitable
缺点:计算量大,检测表格位置时会遗漏或错误裁剪。
Name | Type | Description | Default |
---|---|---|---|
parsing_algorithm | Literal[“unitable”] | 将使用的解析方式,当前unitable | None |
min_table_confidence | float | 要提取的表的最小置信度得分。 | 0.75 |
table_output_format | Literal[“html”] | 提取的表格的格式。目前只支持html。 | None |
parser = openparse.DocumentParser(
table_args={
"parsing_algorithm": "unitable",
"min_table_confidence": 0.8,
}
)
parsed_doc = parser.parse(doc_with_tables_path)
2) Pymupdf
在结构相对简单的密集表上运行良好、也很快。
Name | Type | Description | Default |
---|---|---|---|
parsing_algorithm | Literal[‘pymupdf’] | 将使用的解析方式,当前pymupdf | None |
min_table_confidence | float | 要提取的表的最小置信度得分。 | 0.75 |
table_output_format | Literal[‘html|markdown’] | 提取的表格的格式。目前只支持html和markdown。 | None |
# defining the parser (table_args is a dict)
parser = openparse.DocumentParser(
table_args={
"parsing_algorithm": "pymupdf",
"table_output_format": "markdown"
}
)
# ingesting the document
parsed_10k = parser.parse(meta10k_path)
3) Table Transformer
在具有更复杂结构和大量空白的表上运行良好。
Name | Type | Description | Default |
---|---|---|---|
parsing_algorithm | Literal[“table-transformers”] | 将使用的解析方式,当前table-transformers | None |
min_table_confidence | float | 要提取的表的最小置信度得分。 | None |
min_cell_confidence | float | 要提取的单元格的最小置信度分数。 | None |
table_output_format | Literal[“markdown”, “html”] | 提取的表格的格式。同时支持markdown和html。 | None |
parser = openparse.DocumentParser(
table_args={
"parsing_algorithm": "table-transformers",
"min_table_confidence": 0.8,
}
)
parsed_doc2 = parser.parse(doc_with_tables_path)
Visualization
Node类内置了对在jupyter笔记本中将其文本内容呈现为markdown的支持。
import openparse
basic_doc_path = "./sample-docs/mobile-home-manual.pdf"
parser = openparse.DocumentParser()
parsed_basic_doc = parser.parse(basic_doc_path)
for node in parsed_basic_doc.nodes:
display(node)
还可以将结果直接叠加在原始pdf上显示
pdf = openparse.Pdf(basic_doc_path)
pdf.display_with_bboxes(
parsed_basic_doc.nodes,
)
还可以将原始pdf上标记结果并导出到单独的pdf文件中
pdf = openparse.Pdf(basic_doc_path)
pdf.export_with_bboxes(
parsed_basic_doc.nodes,
output_pdf="./sample-docs/mobile-home-manual-marked-up.pdf"
)
突出特点
🔍 视觉驱动:Open-Parse通过视觉分析提升给LLM的输入质量,超越简单的文本分割。
✍️ Markdown支持:支持基础Markdown解析,包括标题、粗体和斜体。
📊 高精度表格支持:以准确度超越传统工具的方式,将表格提取到干净的Markdown格式。
🛠️ 可扩展性:轻松实现自定义后处理步骤。
💡 直观易用:优秀的编辑器支持,处处自动补全,减少调试时间。
🎯 易于使用:设计上易于上手和学习,减少查阅文档的时间。