像人类一样轻松地对复杂文档进行分块。
对文档进行分块是一项具有挑战性的任务,它支撑着任何 RAG 系统。高质量的结果对于人工智能应用的成功至关重要,但大多数开源库处理复杂文档的能力都受到限制。
Open Parse 旨在通过提供灵活、易于使用的库来填补这一空白,该库能够直观地识别文档布局并有效地对其进行分块。
文本分割将文件转换为原始文本并将其分割。
有一些很棒的库,例如布局解析器。
?视觉驱动: Open-Parse 直观地分析文档以实现卓越的 LLM 输入,超越简单的文本分割。
✍️ Markdown 支持:解析标题、粗体和斜体的基本 Markdown 支持。
高精度表格支持:将表格提取为干净的 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 :
print ( node )
?尝试此处的示例笔记本
文档分块从根本上讲是将相似的语义节点分组在一起。通过嵌入每个节点的文本,我们可以根据它们的相似性将它们聚集在一起。
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 )
?示例笔记本在这里
在引擎盖下使用 pydantic,以便您可以使用以下命令序列化结果
parsed_content . dict ()
# or to convert to a valid json dict
parsed_content . json ()
Python 3.8+
处理 PDF 文件:
提取表:
pip install openparse
启用 OCR 支持:
PyMuPDF 已经包含支持 OCR 功能的所有逻辑。但它还需要 Tesseract 的语言支持数据,所以仍然需要安装 Tesseract-OCR。
语言支持文件夹位置必须通过将其存储在环境变量“TESSDATA_PREFIX”中或作为适用函数中的参数来传达。
因此,要获得有效的 OCR 功能,请确保完成此清单:
安装超立方体。
找到 Tesseract 的语言支持文件夹。通常您会在这里找到它:
Windows: C:/Program Files/Tesseract-OCR/tessdata
Unix 系统: /usr/share/tesseract-ocr/5/tessdata
macOS(通过 Homebrew 安装):
/opt/homebrew/share/tessdata
/opt/homebrew/Cellar/tesseract/<version>/share/tessdata/
设置环境变量TESSDATA_PREFIX
Windows: setx TESSDATA_PREFIX "C:/Program Files/Tesseract-OCR/tessdata"
Unix 系统: declare -x TESSDATA_PREFIX=/usr/share/tesseract-ocr/5/tessdata
macOS(通过 Homebrew 安装): export TESSDATA_PREFIX=$(brew --prefix tesseract)/share/tessdata
注意:在 Windows 系统上,这必须在 Python 之外发生——在启动脚本之前。仅仅操纵 os.environ 是行不通的!
该存储库提供了一个可选功能,可以使用各种深度学习模型解析表中的内容。
pip install "openparse[ml]"
然后下载模型权重
openparse-download
您可以使用以下命令运行解析。
parser = openparse . DocumentParser (
table_args = {
"parsing_algorithm" : "unitable" ,
"min_table_confidence" : 0.8 ,
},
)
parsed_nodes = parser . parse ( pdf_path )
请注意,我们目前使用表转换器进行所有表检测,我们发现其性能不佳。这会对unitable的下游结果产生负面影响。如果您知道更好的模型,请打开一个问题——unitable 团队提到他们也可能很快添加这个模型。
https://github.com/Filimoa/open-parse/tree/main/src/cookbooks
https://filimoa.github.io/open-parse/
您的用例需要一些特殊的东西吗?伸出手来。