nlm-ingestor:RAG基于规则的开源PDF解析器


此存储库包含适用于以下文件格式的自定义 RAG(检索增强生成)友好解析器:PDF、超文本标记语言、DOCX、PPTX 以及 Apache Tika 支持的任何其他格式。

什么是基于规则的解析器与基于模型的解析器
在 4 年的时间里,nlmatics 团队评估了多种选择,包括 Tom Liu 和 Yi Zhang 开发的基于 yolo 的视觉解析器。最终,由于以下原因,我们选择了基于规则的解析器。

  1. 与任何视觉解析器相比,它的速度要快得多(100 倍),因为您必须从 PDF 的所有页面(即使是具有文本层的页面)创建图像才能使用视觉解析器。我们认为,视觉解析器对于没有文本层的 OCRd PDF 或包含表单数据的小型 PDF 文件来说是更好的选择,但对于跨越数百页的较大文本层 PDF,像我们这样的基于规则的解析器更实用。
  2. 如果您不使用 PDF OCR 功能,则无需特殊硬件即可运行此解析器。您可以使用 2000 年代初的硬件来运行它!
  3. 我们发现视觉解析器(或任何与此相关的解析器,包括这个)很容易出错,并且修复模型中错误的解决方案并不完美:
    • 向训练集​​中添加更多示例,这可能会降低之前学习的模型的准确性,并导致之前工作代码的不确定性
    • 使用基于规则的想法来解决基于模型的解析器问题使我们重新开始编写大量规则。

PDF 解析器
PDF 解析器是一个基于规则的解析器,它使用来自 nlmatics 修改版 tika 的文本坐标(边界框)、图形和字体数据,可在https://github.com/nlmatics/nlm-tika找到。PDF 解析器在文本层上工作,还提供 OCR 选项 (apply_ocr),以便在 PDF 中有扫描页面时自动使用 OCR。OCR 功能基于 tika 的 nlmatics 修改版本,它在底层使用了 tesseract。

查看笔记本pdf_visual_ingestor_step_by_step直接使用 PDF 解析器进行实验。

PDF 解析器具有以下功能:

  1. 章节和小节及其级别。
  2. 段落 - 组合行。
  3. 章节和段落之间的链接。
  4. 表格以及表格所在的部分。
  5. 列表和嵌套列表。
  6. 连接跨页面的内容。
  7. 删除重复的页眉和页脚。
  8. 水印去除。
  9. 带边界框的 OCR


安装:
直接运行每一步
从https://www.oracle.com/java/technologies/downloads/安装最新版本的 java

运行 tika 服务器:
 java -jar <path_to_nlm_ingestor>/jars/tika-server-standard-nlm-modified-2.4.1_v6.jar

安装摄取器
!pip install nlm-ingestor

运行摄取器
python -m nlm_ingestor.ingestion_daemon

网友讨论:

  • 现在有很多用于 RAG 的文件加载器: (langchain, LLMindex, unstructured, ...),
  • 鉴于 Tika 的成熟度和支持的格式数量众多,我长期以来一直使用 Tika 进行文档解析。XHTML 输出有助于对 RAG 文档进行分块。
    这里有几个例子:
    https://neuml.hashnode.dev/build-rag-pipelines-with-txtai
    https://neuml.hashnode.dev/extract-text-from-documents
  • Tika 在底层使用 PDFBox,使用其内置的文本提取器(这是“ok”)。如果您专门寻找表格提取,请查看 Tabula ( https://tabula.technology ),它也是构建在 PDFBox 之上,并且有来自相同维护者的一些贡献。PDFBox 实际上公开了一个比 Tabula 使用的更低级别的文本提取 API(我编写的!),允许您使用自己的提取器 - 但这就是龙的生存地,相信我:)
  • 请将此服务器与 llmsherpa LayoutPDFReader 结合使用,为您的 LLM/RAG 项目获取最佳块: https: //github.com/nlmatics/llmsherpa。请参阅存储库中的示例和笔记本。
  • 我尝试用它解析几百个pdf。结果相当不错。
  • 可以将该库与 llmsherpa LayoutPDFReader 结合使用。
    这里有一些带有笔记本的示例: https: //github.com/nlmatics/llmsherpa 这是存储库中的另一个带有示例的笔记本:https://github.com/nlmatics/nlm-ingestor/blob/main/notebooks...
  • 与 Azure 文档智能不同:做的不是同一件事。大多数云解析器使用视觉模型,它们速度慢得多,成本高,并且您需要在它们之上编写代码以提取好的块。