nlm-ingestor

GitHub
1.3k 197 中等 1 次阅读 2天前Apache-2.0开发框架数据工具
AI 解读 由 AI 自动生成,仅供参考

nlm-ingestor 是一款专为大语言模型(LLM)应用设计的后端解析服务,旨在解决非结构化文档难以被高效检索和理解的难题。它作为 llmsherpa API 的服务端核心,能够将 PDF、HTML、Word、PPTX 等多种格式的文档,转化为对检索增强生成(RAG)技术高度友好的结构化数据块。

该工具特别擅长处理复杂的 PDF 文件,不仅能精准识别章节层级、段落、表格及嵌套列表,还能自动去除页眉页脚和水印,甚至支持跨页内容拼接。对于扫描版文档,它内置了基于 Tesseract 的 OCR 功能,可自动提取文字并保留坐标信息。与依赖重型显卡的视觉模型不同,nlm-ingestor 采用独特的规则驱动解析策略,在无需特殊硬件的情况下,实现了比视觉方案快百倍的解析速度,同时保持了极高的准确率。

nlm-ingestor 非常适合需要构建企业知识库、智能问答系统或文档分析应用的开发者与研究人员使用。通过简单的 Docker 部署或本地安装,用户即可快速搭建高性能的文档处理流水线,让大模型更“读懂”你的专业文档。

使用场景

某法律科技团队需要构建一个智能合同审查系统,要求从数百份包含复杂表格、页眉页脚及扫描页的 PDF 合同中提取精准条款供大模型分析。

没有 nlm-ingestor 时

  • 结构丢失严重:传统解析器将文档拆分为零散文本行,导致合同中的“章节 - 子条款”层级关系断裂,大模型无法理解上下文逻辑。
  • 表格数据错乱:复杂的赔偿计算表格被还原为无意义的字符串,关键数值与对应项目失去关联,导致检索结果不可用。
  • 噪声干扰大:每页重复出现的律所页眉、页脚及水印被当作正文内容摄入,严重干扰向量检索的准确度。
  • 扫描件处理难:遇到历史扫描版合同时,需额外搭建独立的 OCR 流程并进行人工坐标对齐,开发周期长且维护成本高。

使用 nlm-ingestor 后

  • 层级完美还原:nlm-ingestor 利用文本坐标和字体规则,自动识别并重组了合同的章节与段落层级,让大模型能精准定位到具体条款。
  • 表格结构化输出:工具自动识别表格边界及其所属章节,将复杂的赔偿表转换为结构化的行列数据,确保数值与项目准确对应。
  • 智能清洗噪声:内置算法自动移除重复的页眉页脚和水印,仅保留纯净的业务内容,显著提升了 RAG 检索的相关性。
  • 无缝处理扫描件:开启 apply_ocr 参数后,nlm-ingestor 自动对扫描页进行 OCR 识别并结合边界框定位,无需额外开发即可统一处理混合文档。

nlm-ingestor 通过基于规则的深度解析,将非结构化法律文档转化为大模型可直接理解的高质量知识块,极大降低了企业级 RAG 系统的构建门槛。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU
  • 非必需
  • 若不使用 PDF OCR 功能,无需特殊硬件(可在早期硬件上运行)
  • 若启用 OCR,底层依赖 Tesseract,未明确指定 GPU 需求,通常 CPU 即可运行
内存

未说明

依赖
notes1. 必须安装最新版 Java 以运行修改版的 Tika 服务器 (tika-server-standard-nlm-modified-2.9.2_v2.jar)。 2. 提供 Docker 镜像作为替代部署方案。 3. 核心解析器为基于规则的实现,速度比视觉模型快 100 倍,专为处理含文本层的 PDF 优化。 4. 若需 OCR 功能,需在启动参数中添加 '&applyOcr=yes',此时依赖底层的 Tesseract 引擎。 5. 生产环境建议配合 Nginx 或云网关使用,而非直接暴露服务。
python未说明 (需支持 pip 安装 nlm-ingestor)
Java (最新版,用于运行 Tika Server)
nlm-ingestor
nlm-tika (修改版 Tika JAR)
Tesseract (可选,用于 OCR)
nlm-ingestor hero image

快速开始

关于

此仓库提供了用于连接 llmsherpa API 的服务代码。 该仓库包含针对以下文件格式的自定义 RAG(检索增强生成)友好解析器:

PDF

PDF 解析器是一种基于规则的解析器,它利用文本坐标(边界框)、图形和字体数据,这些数据来自 nlmatics 修改过的 Tika 版本,详见此处:https://github.com/nlmatics/nlm-tika。 PDF 解析器主要基于文本层工作,并提供 OCR 选项(apply_ocr),以便在 PDF 中存在扫描页面时自动启用 OCR。OCR 功能基于 nlmatics 修改的 Tika 版本实现,底层使用 Tesseract 引擎。 请查看笔记本 pdf_visual_ingestor_step_by_step,直接体验 PDF 解析器。

PDF 解析器具备以下功能:

  1. 各级章节与子章节。
  2. 段落——将多行文本合并为段落。
  3. 章节与段落之间的链接。
  4. 表格及其所在章节。
  5. 列表及嵌套列表。
  6. 跨页内容的拼接。
  7. 重复页眉和页脚的去除。
  8. 水印移除。
  9. 带边界框的 OCR。

HTML

一种特殊的 HTML 解析器,能够创建布局感知的块,从而以更高质量的片段提升 RAG 性能。

文本

一种特殊的文本解析器,仅通过分析文本内容来识别列表、表格、标题等,而不依赖任何视觉、字体或边界框信息。

DOCX、PPTX 以及 Apache Tika 支持的其他格式

处理这些类型的文档有两种方式:

  • 使用 Tika 为这些文件类型生成的 HTML 输出,并由 HTML 解析器进行解析。

安装步骤:

直接执行每一步

  1. https://www.oracle.com/java/technologies/downloads/ 安装最新版本的 Java。
  2. 运行 Tika 服务器:
java -jar <path_to_nlm_ingestor>/jars/tika-server-standard-nlm-modified-2.9.2_v2.jar
  1. 安装 ingestor:
!pip install nlm-ingestor
  1. 运行 ingestor:
python -m nlm_ingestor.ingestion_daemon

使用 Docker 文件

可通过公共 GitHub 容器注册表获取 Docker 镜像。

拉取 Docker 镜像:

docker pull ghcr.io/nlmatics/nlm-ingestor:latest

运行 Docker 镜像,并将端口 5001 映射到您选择的端口:

docker run -p 5010:5001 ghcr.io/nlmatics/nlm-ingestor:latest-<version>

服务器启动后,您可以使用 llmsherpa API 库获取片段,并将其用于您的 LLM 项目。您的 llmsherpa URL 将是: "http://localhost:5010/api/parseDocument?renderFormat=all"

  • 若要启用 OCR,请添加 &applyOcr=yes。
  • 若要使用新的缩进解析器(采用不同算法分配标题级别),请添加 &useNewIndentParser=yes。
  • 此服务器适用于开发环境;在生产环境中,建议通过 Nginx 或云网关等安全网关来部署。

测试 ingestor 服务器

用于测试服务器与 llmsherpa 解析器的示例代码位于此笔记本中:[notebooks/test_llmsherpa_api.ipynb]。

基于规则的解析器 vs 基于模型的解析器

在过去四年里,nlmatics 团队评估了多种方案,其中包括由 Tom Liu 和 Yi Zhang 开发的基于 YOLO 的视觉解析器。最终,我们选择了基于规则的解析器,原因如下:

  1. 相较于任何视觉解析器,它的速度要快得多(约 100 倍)。因为即使对于带有文本层的 PDF,使用视觉解析器也至少需要先将所有页面转换为图像。我们认为,视觉解析器更适合用于没有文本层的 OCR 处理后的 PDF,或者包含表单数据的小型 PDF 文件;而对于包含数百页的大规模文本层 PDF,像我们这样的基于规则的解析器更为实用。
  2. 如果不使用 PDF 的 OCR 功能,运行此解析器无需特殊硬件。即使是 2000 年代初期的硬件也能胜任!
  3. 我们发现,视觉解析器(实际上包括所有解析器,也包括我们自己的解析器)容易出错,而修复模型错误的方法并不理想:
    • 向训练集添加更多样本,这可能会降低模型先前学习的准确性,导致原有代码出现不确定性。
    • 使用基于规则的方法来修复基于模型的解析器问题,最终又会回到编写大量规则的老路。

致谢

PDF 解析器中的 visual_ingestornew_indent_parser 由 Ambika Sukla 编写,Reshav Abraham 对其进行了补充贡献,他编写了最初的 Tika 修改代码;Tom Liu 则撰写了原始的缩进解析器;Kiran Panicker 在解析速度、表格解析精度、缩进解析精度以及重新排序精度等方面做出了多项改进。

HTML Ingestor 由 Tom Liu 编写。

Markdown Parser 由 Yi Zhang 编写。

Text Ingestor 由 Reshav Abraham 编写。

XML Ingestor 主要由 Ambika Sukla 编写,用于处理 PubMed XML 文件。

作为所有其他解析器的核心句子处理工具,line_parser 由 Ambika Sukla 编写。

此外,我们还要感谢 Apache PDFBox 和 Tika 的开发者社区,多年来他们为 PDF 解析器奠定了基础。

Nlm 修改版 Tika

Nlm 修改版的 Tika 可以在以下分支中找到:https://github.com/nlmatics/nlm-tika/tree/2.4.1-nlm。
为方便起见,该仓库的 jars/ 文件夹中已包含编译好的 JAR 文件。

在某些情况下,您的 PDF 文件可能会导致 Java 服务器出现错误,这时您需要修改相关代码以解决问题,并重新编译 JAR 文件。

以下是被修改的文件:

  1. https://github.com/nlmatics/nlm-tika/blob/2.4.1-nlm/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/PDF2XHTML.java
  2. https://github.com/nlmatics/nlm-tika/blob/2.4.1-nlm/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/AbstractPDF2XHTML.java

上述修改旨在为每个文本元素添加字体和坐标信息,并移除水印。

  1. https://github.com/nlmatics/nlm-tika/blob/2.4.1-nlm/tika-parsers/tika-parsers-standard/tika-parsers-standard-modules/tika-parser-pdf-module/src/main/java/org/apache/tika/parser/pdf/GraphicsStreamProcessor.java

该文件的修改是为了添加线条和矩形,这可能有助于表格的检测。

要查看这些更改的效果,请参阅笔记本的第一部分:https://github.com/nlmatics/nlm-ingestor/blob/main/notebooks/pdf_visual_ingestor_step_by_step.ipynb

未来工作的一些想法:

  1. 通过基于 PDFBox 编写自己的封装器,使这些更改与 Tika 解析器解耦。
  2. 升级到最新版本的 Tika。
  3. 清理返回的 HTML 格式,使其更符合 CSS 规范。

Pacific 使用说明

  1. 运行测试
    make test
    make test-pdf-ingestor

  2. 构建镜像。此操作会将镜像推送到 Pacific 生产环境的 ECR 仓库。
    make build_and_push

  3. 镜像构建完成后,您需要前往 pacific-server 仓库并部署模态应用。请确保您的本地环境中已设置好 Pacific 生产环境的 AWS 环境变量。

如果您需要更新 nlm-utils,请前往 nlm-utils 仓库,更新依赖项,构建 WHL 文件,并将其复制到本仓库的 whl/ 目录下。

版本历史

v0.1.92024/07/26
v0.1.82024/06/13
v0.1.72024/06/12
v0.1.62024/02/09
v0.1.52024/01/26
v0.1.42024/01/24
v0.1.32024/01/24
v0.1.22024/01/23
v0.0.32024/01/23
v0.0.22024/01/23
v0.0.1-test2024/01/23

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|4天前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|5天前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

148.6k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.1k|★★☆☆☆|2天前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|今天
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|3天前
插件开发框架