[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"tool-nlmatics--nlm-ingestor":3,"similar-nlmatics--nlm-ingestor":148},{"id":4,"github_repo":5,"name":6,"description_en":7,"description_zh":8,"ai_summary_zh":8,"readme_en":9,"readme_zh":10,"quickstart_zh":11,"use_case_zh":12,"hero_image_url":13,"owner_login":14,"owner_name":15,"owner_avatar_url":16,"owner_bio":17,"owner_company":18,"owner_location":18,"owner_email":18,"owner_twitter":18,"owner_website":19,"owner_url":20,"languages":21,"stars":42,"forks":43,"last_commit_at":44,"license":45,"difficulty_score":46,"env_os":47,"env_gpu":48,"env_ram":49,"env_deps":50,"category_tags":57,"github_topics":18,"view_count":60,"oss_zip_url":18,"oss_zip_packed_at":18,"status":61,"created_at":62,"updated_at":63,"faqs":64,"releases":94},6127,"nlmatics\u002Fnlm-ingestor","nlm-ingestor","This repo provides the server side code for llmsherpa API to connect. It includes parsers for various file formats.","nlm-ingestor 是一款专为大语言模型（LLM）应用设计的后端解析服务，旨在解决非结构化文档难以被高效检索和理解的难题。它作为 llmsherpa API 的服务端核心，能够将 PDF、HTML、Word、PPTX 等多种格式的文档，转化为对检索增强生成（RAG）技术高度友好的结构化数据块。\n\n该工具特别擅长处理复杂的 PDF 文件，不仅能精准识别章节层级、段落、表格及嵌套列表，还能自动去除页眉页脚和水印，甚至支持跨页内容拼接。对于扫描版文档，它内置了基于 Tesseract 的 OCR 功能，可自动提取文字并保留坐标信息。与依赖重型显卡的视觉模型不同，nlm-ingestor 采用独特的规则驱动解析策略，在无需特殊硬件的情况下，实现了比视觉方案快百倍的解析速度，同时保持了极高的准确率。\n\nnlm-ingestor 非常适合需要构建企业知识库、智能问答系统或文档分析应用的开发者与研究人员使用。通过简单的 Docker 部署或本地安装，用户即可快速搭建高性能的文档处理流水线，让大模型更“读懂”你的专业文档。","# About\n\nThis repo provides the service code for [llmsherpa](https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fllmsherpa) API to connect. \nThis repo contains custom RAG (retrieval augmented generation) friendly parsers for the following file formats:\n### PDF\nThe PDF parser is a rule based parser which uses text co-ordinates (boundary box), graphics and font data from nlmatics modified version of tika found here https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika.\nThe PDF parser works off text layer and also offers a OCR option (apply_ocr) to automatically use OCR if there are scanned pages in your PDFs. The OCR feature is based off a nlmatics modified version of tika which uses tesseract underneath.\nCheck out the notebook [pdf_visual_ingestor_step_by_step](notebooks\u002Fpdf_visual_ingestor_step_by_step.ipynb) to experiment directly with the PDF parser.\n\nThe PDF Parser offers the following features:\n\n1. Sections and subsections along with their levels.\n2. Paragraphs - combines lines.\n3. Links between sections and paragraphs.\n5. Tables along with the section the tables are found in.\n6. Lists and nested lists.\n7. Join content spread across pages.\n8. Removal of repeating headers and footers.\n9. Watermark removal.\n10. OCR with boundary boxes\n\n### HTML\nA special HTML parser that creates layout aware blocks to make RAG performance better with higher quality chunks. \n### Text\nA special text parser which tries to figure out lists, tables, headers etc. purely by looking at the text and no visual, font or bbox information.\n### DOCX, PPTX and any other format supported by Apache Tika\nThere are two ways to process these types of documents\n- html output from tika for these file types is used and parsed by the html parser\n\n## Installation steps:\n### Run each step directly\n1. Install latest version of java from https:\u002F\u002Fwww.oracle.com\u002Fjava\u002Ftechnologies\u002Fdownloads\u002F\n2. Run the tika server:\n```\njava -jar \u003Cpath_to_nlm_ingestor>\u002Fjars\u002Ftika-server-standard-nlm-modified-2.9.2_v2.jar\n```\n3. Install the ingestor\n```\n!pip install nlm-ingestor\n```\n4. Run the ingestor\n```\npython -m nlm_ingestor.ingestion_daemon\n```\n### Run the docker file\nA docker image is available via public github container registry. \n\nPull the docker image\n```\ndocker pull ghcr.io\u002Fnlmatics\u002Fnlm-ingestor:latest\n```\nRun the docker image mapping the port 5001 to port of your choice. \n```\ndocker run -p 5010:5001 ghcr.io\u002Fnlmatics\u002Fnlm-ingestor:latest-\u003Cversion>\n```\nOnce you have the server running, you can use the [llmsherpa](https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fllmsherpa) API library to get chunks and use them for your LLM projects. Your llmsherpa_url will be:\n\"http:\u002F\u002Flocalhost:5010\u002Fapi\u002FparseDocument?renderFormat=all\"\n- to apply OCR add &applyOcr=yes\n- to use the new indent parser which uses a different algorithm to assign header levels, add &useNewIndentParser=yes\n- this server is good for your development - in production it is recommended to run this behind a secure gateway using nginx or cloud gateways\n\n### Test the ingestor server\nSample test code to test the server with llmsherpa parser is in this [notebook](notebooks\u002Ftest_llmsherpa_api.ipynb).\n\n## Rule based parser vs model based parser\nOver the course of 4 years, nlmatics team evaluated a variety of options including a yolo based vision parser developed by Tom Liu and Yi Zhang. Ultimately, we settled with the rule based parser due to the following reasons.\n1. It is substantially (100x) faster compared to any vision parser as bare miniumum you have to create images out of all pages of a PDF (even for the ones with text layer) to use a vision parser. It is our opinion that vision parser is a better option for OCRd PDF without a text layer, or for small PDF files consisting form like data, but for larger text layer PDFs, spanning hundreds of pages, a rule based parser like ours is more practical.\n2. No special hardware is needed to run this parser if you are not using the PDF OCR feature. You can run this with hardware from early 2000s!\n3. We found vision parser (or any parser for that matter including this) to be error prone and the solution to fix errors in a model were not pretty:\n    - Add more examples to your training set which may make the accuracy of the model from previous learning degrade and result in uncertainty in previously working code\n    - Using rule based ideas to fix model based parser issue gets us back to writing a lot of rules again.\n\n## Credits\nThe PDFparser [visual_ingestor](nlm_ingestor\u002Fingestor\u002Fvisual_ingestor\u002Fvisual_ingestor.py) and [new_indent_parser](nlm_ingestor\u002Fingestor\u002Fvisual_ingestor\u002Fnew_indent_parser.py) was written by Ambika Sukla with additional contributions from Reshav Abraham who wrote the initial code to modify tika, Tom Liu who wrote the original Indent Parser and Kiran Panicker who made several improvements to the parsing speed, table parsing accuracy, indent parsing accuracy and reordering accuracy. \n\nThe [HTML Ingestor](nlm_ingestor\u002Fingestor\u002Fhtml_ingestor.py) was written by Tom Liu.\n\nThe [Markdown Parser](nlm_ingestor\u002Ffile_parser\u002Fmarkdown_parser.py) was written by Yi Zhang.\n\nThe [Text Ingestor](nlm_ingestor\u002Fingestor\u002Ftext_ingestor.py) was written by Reshav Abraham.\n\nThe [XML Ingestor](nlm_ingestor\u002Fingestor\u002Fxml_ingestor.py) was written by Ambika Sukla primarily to process PubMed XMLs.\n\nThe [line_parser](nlm_ingestor\u002Fingestor\u002Fline_parser.py) which serves as a core sentence processing utility for all the other parsers was written by Ambika Sukla. \n\nAlso we are thankful to the Apache PDFBox and Tika developer community for their years of work in providing the base for the PDF Parser. \n\n## Nlm Modified Tika\nNlm modified version of Tika can be found in the 2.4.1-nlm branch here https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika\u002Ftree\u002F2.4.1-nlm\nFor convenience, a compiled jar file of the code is included in this repo in jars\u002F folder.\nIn some cases, your PDFs may result in errors in the Java server and you will need to modify the code there to resolve the issue and recompile the jar file.\n\nThe following files are changed: \n\n1) https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika\u002Fblob\u002F2.4.1-nlm\u002Ftika-parsers\u002Ftika-parsers-standard\u002Ftika-parsers-standard-modules\u002Ftika-parser-pdf-module\u002Fsrc\u002Fmain\u002Fjava\u002Forg\u002Fapache\u002Ftika\u002Fparser\u002Fpdf\u002FPDF2XHTML.java\n2) https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika\u002Fblob\u002F2.4.1-nlm\u002Ftika-parsers\u002Ftika-parsers-standard\u002Ftika-parsers-standard-modules\u002Ftika-parser-pdf-module\u002Fsrc\u002Fmain\u002Fjava\u002Forg\u002Fapache\u002Ftika\u002Fparser\u002Fpdf\u002FAbstractPDF2XHTML.java\n\nThe above is to add font and co-ordinates to every text element. It also removes watermarks.\n\n3) https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika\u002Fblob\u002F2.4.1-nlm\u002Ftika-parsers\u002Ftika-parsers-standard\u002Ftika-parsers-standard-modules\u002Ftika-parser-pdf-module\u002Fsrc\u002Fmain\u002Fjava\u002Forg\u002Fapache\u002Ftika\u002Fparser\u002Fpdf\u002FGraphicsStreamProcessor.java\n\nThe above is to add lines and rectangles that can potentially help with table detection.\n\nTo see the impact of these changes, see the first part of the notebook here: https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-ingestor\u002Fblob\u002Fmain\u002Fnotebooks\u002Fpdf_visual_ingestor_step_by_step.ipynb\n\nSome ideas for future work:\n1) Make the changes independent of tika by writing own wrapper over pdfbox\n2) Upgrade to latest version of tika \n3) Cleanup the format of returned html to make it more css friendly\n\n\n### Pacific Readme\n\n1. run tests\n`make test`\n`make test-pdf-ingestor`\n\n2. build image. This pushes to the Pacific production ECR repo.\n`make build_and_push`\n\n3. After image build, you need to go to the pacific-server repo and deploy the modal app. Make sure you have the Pacific prod aws vars as env vars in your local environment.\n\nIf you need to update nlm-utils, go to the nlm-utils repo, update the dependencies, build a whl, and copy under `whl\u002F` in this repo.","# 关于\n\n此仓库提供了用于连接 [llmsherpa](https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fllmsherpa) API 的服务代码。\n该仓库包含针对以下文件格式的自定义 RAG（检索增强生成）友好解析器：\n### PDF\nPDF 解析器是一种基于规则的解析器，它利用文本坐标（边界框）、图形和字体数据，这些数据来自 nlmatics 修改过的 Tika 版本，详见此处：https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika。\nPDF 解析器主要基于文本层工作，并提供 OCR 选项（apply_ocr），以便在 PDF 中存在扫描页面时自动启用 OCR。OCR 功能基于 nlmatics 修改的 Tika 版本实现，底层使用 Tesseract 引擎。\n请查看笔记本 [pdf_visual_ingestor_step_by_step](notebooks\u002Fpdf_visual_ingestor_step_by_step.ipynb)，直接体验 PDF 解析器。\n\nPDF 解析器具备以下功能：\n1. 各级章节与子章节。\n2. 段落——将多行文本合并为段落。\n3. 章节与段落之间的链接。\n5. 表格及其所在章节。\n6. 列表及嵌套列表。\n7. 跨页内容的拼接。\n8. 重复页眉和页脚的去除。\n9. 水印移除。\n10. 带边界框的 OCR。\n\n### HTML\n一种特殊的 HTML 解析器，能够创建布局感知的块，从而以更高质量的片段提升 RAG 性能。\n### 文本\n一种特殊的文本解析器，仅通过分析文本内容来识别列表、表格、标题等，而不依赖任何视觉、字体或边界框信息。\n### DOCX、PPTX 以及 Apache Tika 支持的其他格式\n处理这些类型的文档有两种方式：\n- 使用 Tika 为这些文件类型生成的 HTML 输出，并由 HTML 解析器进行解析。\n\n## 安装步骤：\n### 直接执行每一步\n1. 从 https:\u002F\u002Fwww.oracle.com\u002Fjava\u002Ftechnologies\u002Fdownloads\u002F 安装最新版本的 Java。\n2. 运行 Tika 服务器：\n```\njava -jar \u003Cpath_to_nlm_ingestor>\u002Fjars\u002Ftika-server-standard-nlm-modified-2.9.2_v2.jar\n```\n3. 安装 ingestor：\n```\n!pip install nlm-ingestor\n```\n4. 运行 ingestor：\n```\npython -m nlm_ingestor.ingestion_daemon\n```\n### 使用 Docker 文件\n可通过公共 GitHub 容器注册表获取 Docker 镜像。\n\n拉取 Docker 镜像：\n```\ndocker pull ghcr.io\u002Fnlmatics\u002Fnlm-ingestor:latest\n```\n运行 Docker 镜像，并将端口 5001 映射到您选择的端口：\n```\ndocker run -p 5010:5001 ghcr.io\u002Fnlmatics\u002Fnlm-ingestor:latest-\u003Cversion>\n```\n服务器启动后，您可以使用 [llmsherpa](https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fllmsherpa) API 库获取片段，并将其用于您的 LLM 项目。您的 llmsherpa URL 将是：\n\"http:\u002F\u002Flocalhost:5010\u002Fapi\u002FparseDocument?renderFormat=all\"\n- 若要启用 OCR，请添加 &applyOcr=yes。\n- 若要使用新的缩进解析器（采用不同算法分配标题级别），请添加 &useNewIndentParser=yes。\n- 此服务器适用于开发环境；在生产环境中，建议通过 Nginx 或云网关等安全网关来部署。\n\n### 测试 ingestor 服务器\n用于测试服务器与 llmsherpa 解析器的示例代码位于此笔记本中：[notebooks\u002Ftest_llmsherpa_api.ipynb]。\n\n## 基于规则的解析器 vs 基于模型的解析器\n在过去四年里，nlmatics 团队评估了多种方案，其中包括由 Tom Liu 和 Yi Zhang 开发的基于 YOLO 的视觉解析器。最终，我们选择了基于规则的解析器，原因如下：\n1. 相较于任何视觉解析器，它的速度要快得多（约 100 倍）。因为即使对于带有文本层的 PDF，使用视觉解析器也至少需要先将所有页面转换为图像。我们认为，视觉解析器更适合用于没有文本层的 OCR 处理后的 PDF，或者包含表单数据的小型 PDF 文件；而对于包含数百页的大规模文本层 PDF，像我们这样的基于规则的解析器更为实用。\n2. 如果不使用 PDF 的 OCR 功能，运行此解析器无需特殊硬件。即使是 2000 年代初期的硬件也能胜任！\n3. 我们发现，视觉解析器（实际上包括所有解析器，也包括我们自己的解析器）容易出错，而修复模型错误的方法并不理想：\n    - 向训练集添加更多样本，这可能会降低模型先前学习的准确性，导致原有代码出现不确定性。\n    - 使用基于规则的方法来修复基于模型的解析器问题，最终又会回到编写大量规则的老路。\n\n## 致谢\nPDF 解析器中的 [visual_ingestor](nlm_ingestor\u002Fingestor\u002Fvisual_ingestor\u002Fvisual_ingestor.py) 和 [new_indent_parser](nlm_ingestor\u002Fingestor\u002Fvisual_ingestor\u002Fnew_indent_parser.py) 由 Ambika Sukla 编写，Reshav Abraham 对其进行了补充贡献，他编写了最初的 Tika 修改代码；Tom Liu 则撰写了原始的缩进解析器；Kiran Panicker 在解析速度、表格解析精度、缩进解析精度以及重新排序精度等方面做出了多项改进。\n\n[HTML Ingestor](nlm_ingestor\u002Fingestor\u002Fhtml_ingestor.py) 由 Tom Liu 编写。\n\n[Markdown Parser](nlm_ingestor\u002Ffile_parser\u002Fmarkdown_parser.py) 由 Yi Zhang 编写。\n\n[Text Ingestor](nlm_ingestor\u002Fingestor\u002Ftext_ingestor.py) 由 Reshav Abraham 编写。\n\n[XML Ingestor](nlm_ingestor\u002Fingestor\u002Fxml_ingestor.py) 主要由 Ambika Sukla 编写，用于处理 PubMed XML 文件。\n\n作为所有其他解析器的核心句子处理工具，[line_parser](nlm_ingestor\u002Fingestor\u002Fline_parser.py) 由 Ambika Sukla 编写。\n\n此外，我们还要感谢 Apache PDFBox 和 Tika 的开发者社区，多年来他们为 PDF 解析器奠定了基础。\n\n## Nlm 修改版 Tika\nNlm 修改版的 Tika 可以在以下分支中找到：https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika\u002Ftree\u002F2.4.1-nlm。  \n为方便起见，该仓库的 `jars\u002F` 文件夹中已包含编译好的 JAR 文件。\n\n在某些情况下，您的 PDF 文件可能会导致 Java 服务器出现错误，这时您需要修改相关代码以解决问题，并重新编译 JAR 文件。\n\n以下是被修改的文件：\n\n1) https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika\u002Fblob\u002F2.4.1-nlm\u002Ftika-parsers\u002Ftika-parsers-standard\u002Ftika-parsers-standard-modules\u002Ftika-parser-pdf-module\u002Fsrc\u002Fmain\u002Fjava\u002Forg\u002Fapache\u002Ftika\u002Fparser\u002Fpdf\u002FPDF2XHTML.java  \n2) https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika\u002Fblob\u002F2.4.1-nlm\u002Ftika-parsers\u002Ftika-parsers-standard\u002Ftika-parsers-standard-modules\u002Ftika-parser-pdf-module\u002Fsrc\u002Fmain\u002Fjava\u002Forg\u002Fapache\u002Ftika\u002Fparser\u002Fpdf\u002FAbstractPDF2XHTML.java  \n\n上述修改旨在为每个文本元素添加字体和坐标信息，并移除水印。\n\n3) https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-tika\u002Fblob\u002F2.4.1-nlm\u002Ftika-parsers\u002Ftika-parsers-standard\u002Ftika-parsers-standard-modules\u002Ftika-parser-pdf-module\u002Fsrc\u002Fmain\u002Fjava\u002Forg\u002Fapache\u002Ftika\u002Fparser\u002Fpdf\u002FGraphicsStreamProcessor.java  \n\n该文件的修改是为了添加线条和矩形，这可能有助于表格的检测。\n\n要查看这些更改的效果，请参阅笔记本的第一部分：https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-ingestor\u002Fblob\u002Fmain\u002Fnotebooks\u002Fpdf_visual_ingestor_step_by_step.ipynb\n\n未来工作的一些想法：\n1) 通过基于 PDFBox 编写自己的封装器，使这些更改与 Tika 解析器解耦。\n2) 升级到最新版本的 Tika。\n3) 清理返回的 HTML 格式，使其更符合 CSS 规范。\n\n\n### Pacific 使用说明\n\n1. 运行测试  \n   `make test`  \n   `make test-pdf-ingestor`\n\n2. 构建镜像。此操作会将镜像推送到 Pacific 生产环境的 ECR 仓库。  \n   `make build_and_push`\n\n3. 镜像构建完成后，您需要前往 pacific-server 仓库并部署模态应用。请确保您的本地环境中已设置好 Pacific 生产环境的 AWS 环境变量。\n\n如果您需要更新 nlm-utils，请前往 nlm-utils 仓库，更新依赖项，构建 WHL 文件，并将其复制到本仓库的 `whl\u002F` 目录下。","# nlm-ingestor 快速上手指南\n\n`nlm-ingestor` 是一个专为 RAG（检索增强生成）优化的文档解析服务，能够高质量地提取 PDF、HTML、TXT、DOCX 等格式中的章节、段落、表格和列表结构。它通常与 `llmsherpa` API 配合使用，为大模型项目提供结构化数据块。\n\n## 环境准备\n\n在开始之前，请确保您的系统满足以下要求：\n\n*   **操作系统**: Linux, macOS 或 Windows (推荐 Linux 环境以获得最佳兼容性)\n*   **Java**: 必须安装最新版 Java (JDK\u002FJRE)，这是运行底层 Tika 服务器的必要条件。\n    *   下载地址：[Oracle Java Downloads](https:\u002F\u002Fwww.oracle.com\u002Fjava\u002Ftechnologies\u002Fdownloads\u002F)\n*   **Python**: Python 3.8+ 环境\n*   **Docker (可选)**: 如果选择容器化部署，需安装 Docker。\n\n## 安装步骤\n\n您可以选择**直接运行**或**Docker 部署**两种方式。\n\n### 方式一：直接运行（适合开发与调试）\n\n1.  **启动 Tika 服务器**\n    下载或找到项目中的修改版 Tika JAR 文件，并在终端运行：\n    ```bash\n    java -jar \u003Cpath_to_nlm_ingestor>\u002Fjars\u002Ftika-server-standard-nlm-modified-2.9.2_v2.jar\n    ```\n    *注意：请将 `\u003Cpath_to_nlm_ingestor>` 替换为您的实际项目路径。保持此终端窗口开启。*\n\n2.  **安装 Python 包**\n    在新的终端窗口中安装 ingestor：\n    ```bash\n    pip install nlm-ingestor\n    ```\n    > **国内加速提示**：如果遇到下载速度慢的问题，建议使用清华或阿里镜像源：\n    > `pip install nlm-ingestor -i https:\u002F\u002Fpypi.tuna.tsinghua.edu.cn\u002Fsimple`\n\n3.  **启动 Ingestor 服务**\n    ```bash\n    python -m nlm_ingestor.ingestion_daemon\n    ```\n    默认服务将运行在 `http:\u002F\u002Flocalhost:5001`。\n\n### 方式二：Docker 部署（推荐生产环境）\n\n1.  **拉取镜像**\n    ```bash\n    docker pull ghcr.io\u002Fnlmatics\u002Fnlm-ingestor:latest\n    ```\n    > **国内加速提示**：如果无法访问 `ghcr.io`，可能需要配置 Docker 镜像加速器或使用代理。\n\n2.  **运行容器**\n    将容器端口映射到您选择的本地端口（例如 5010）：\n    ```bash\n    docker run -p 5010:5001 ghcr.io\u002Fnlmatics\u002Fnlm-ingestor:latest\n    ```\n\n## 基本使用\n\n服务启动后，您可以通过 HTTP API 解析文档。最常用的是结合 `llmsherpa` 库使用，也可以直接使用 `curl` 测试。\n\n### 1. 使用 llmsherpa 库（推荐）\n\n首先安装客户端库：\n```bash\npip install llmsherpa\n```\n\n然后使用以下 Python 代码进行解析：\n\n```python\nfrom llmsherpa.readers import LayoutPDFReader\n\n# 配置服务地址\n# 如果使用 Docker 部署且映射到 5010 端口：\nllmsherpa_api_url = \"http:\u002F\u002Flocalhost:5010\u002Fapi\u002FparseDocument?renderFormat=all\"\n\n# 如果需要启用 OCR (针对扫描版 PDF)，添加 &applyOcr=yes\n# llmsherpa_api_url = \"http:\u002F\u002Flocalhost:5010\u002Fapi\u002FparseDocument?renderFormat=all&applyOcr=yes\"\n\n# 初始化阅读器\npdf_reader = LayoutPDFReader(llmsherpa_api_url)\n\n# 解析本地文件或在线 URL\ndoc = pdf_reader.read_pdf(\"path\u002Fto\u002Fyour\u002Fdocument.pdf\")\n# 或者 doc = pdf_reader.read_pdf(\"https:\u002F\u002Fexample.com\u002Fdocument.pdf\")\n\n# 遍历解析出的块 (chunks)\nfor chunk in doc.chunks():\n    print(f\"类型：{chunk.tag}, 内容：{chunk.to_text()}\")\n```\n\n### 2. 直接使用 Curl 测试\n\n如果您想直接测试 API 返回的 JSON 结构：\n\n```bash\ncurl -X POST -F \"file=@\u002Fpath\u002Fto\u002Fyour\u002Fdocument.pdf\" \"http:\u002F\u002Flocalhost:5010\u002Fapi\u002FparseDocument?renderFormat=all\"\n```\n\n### 关键参数说明\n\n在构建 API URL 时，可附加以下参数以增强功能：\n*   `&applyOcr=yes`: 自动对扫描页启用 OCR 识别。\n*   `&useNewIndentParser=yes`: 使用新的缩进算法来更准确地判断标题层级。\n\n> **注意**：默认端口为开发用途。在生产环境中部署时，建议将其置于 Nginx 或云网关之后，并配置 HTTPS 以确保安全。","某法律科技团队需要构建一个智能合同审查系统，要求从数百份包含复杂表格、页眉页脚及扫描页的 PDF 合同中提取精准条款供大模型分析。\n\n### 没有 nlm-ingestor 时\n- **结构丢失严重**：传统解析器将文档拆分为零散文本行，导致合同中的“章节 - 子条款”层级关系断裂，大模型无法理解上下文逻辑。\n- **表格数据错乱**：复杂的赔偿计算表格被还原为无意义的字符串，关键数值与对应项目失去关联，导致检索结果不可用。\n- **噪声干扰大**：每页重复出现的律所页眉、页脚及水印被当作正文内容摄入，严重干扰向量检索的准确度。\n- **扫描件处理难**：遇到历史扫描版合同时，需额外搭建独立的 OCR 流程并进行人工坐标对齐，开发周期长且维护成本高。\n\n### 使用 nlm-ingestor 后\n- **层级完美还原**：nlm-ingestor 利用文本坐标和字体规则，自动识别并重组了合同的章节与段落层级，让大模型能精准定位到具体条款。\n- **表格结构化输出**：工具自动识别表格边界及其所属章节，将复杂的赔偿表转换为结构化的行列数据，确保数值与项目准确对应。\n- **智能清洗噪声**：内置算法自动移除重复的页眉页脚和水印，仅保留纯净的业务内容，显著提升了 RAG 检索的相关性。\n- **无缝处理扫描件**：开启 `apply_ocr` 参数后，nlm-ingestor 自动对扫描页进行 OCR 识别并结合边界框定位，无需额外开发即可统一处理混合文档。\n\nnlm-ingestor 通过基于规则的深度解析，将非结构化法律文档转化为大模型可直接理解的高质量知识块，极大降低了企业级 RAG 系统的构建门槛。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fnlmatics_nlm-ingestor_0ee0718c.png","nlmatics","NLMatics","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fnlmatics_b917acb7.png","",null,"https:\u002F\u002Fwww.nlmatics.com","https:\u002F\u002Fgithub.com\u002Fnlmatics",[22,26,30,34,38],{"name":23,"color":24,"percentage":25},"Python","#3572A5",58,{"name":27,"color":28,"percentage":29},"Jupyter Notebook","#DA5B0B",41.4,{"name":31,"color":32,"percentage":33},"Makefile","#427819",0.3,{"name":35,"color":36,"percentage":37},"Dockerfile","#384d54",0.2,{"name":39,"color":40,"percentage":41},"Shell","#89e051",0.1,1282,197,"2026-04-07T14:35:57","Apache-2.0",3,"Linux, macOS, Windows","非必需。若不使用 PDF OCR 功能，无需特殊硬件（可在早期硬件上运行）；若启用 OCR，底层依赖 Tesseract，未明确指定 GPU 需求，通常 CPU 即可运行。","未说明",{"notes":51,"python":52,"dependencies":53},"1. 必须安装最新版 Java 以运行修改版的 Tika 服务器 (tika-server-standard-nlm-modified-2.9.2_v2.jar)。\n2. 提供 Docker 镜像作为替代部署方案。\n3. 核心解析器为基于规则的实现，速度比视觉模型快 100 倍，专为处理含文本层的 PDF 优化。\n4. 若需 OCR 功能，需在启动参数中添加 '&applyOcr=yes'，此时依赖底层的 Tesseract 引擎。\n5. 生产环境建议配合 Nginx 或云网关使用，而非直接暴露服务。","未说明 (需支持 pip 安装 nlm-ingestor)",[54,6,55,56],"Java (最新版，用于运行 Tika Server)","nlm-tika (修改版 Tika JAR)","Tesseract (可选，用于 OCR)",[58,59],"开发框架","数据工具",2,"ready","2026-03-27T02:49:30.150509","2026-04-10T15:55:45.486575",[65,70,75,80,85,90],{"id":66,"question_zh":67,"answer_zh":68,"source_url":69},27747,"安装说明中提到的 `\u003Cpath_to_nlm_ingestor>` 具体指什么？如何运行 Tika 服务器？","如果您觉得手动配置路径和分别运行服务比较困难，建议直接使用 Docker 镜像。Docker 镜像会自动处理 ingestor 和 Tika 服务器的运行，无需单独配置路径或启动两个服务。只需拉取并运行官方提供的 Docker 镜像即可简化部署流程。","https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-ingestor\u002Fissues\u002F101",{"id":71,"question_zh":72,"answer_zh":73,"source_url":74},27748,"运行代码时出现 `KeyError: 'return_dict'` 错误怎么办？","该错误通常是因为 Tika 服务器没有正常运行导致的。请检查您的 Tika 服务器是否已启动并在监听正确的端口。如果服务器未运行，解析请求将无法返回预期的数据结构，从而引发此 KeyError。","https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-ingestor\u002Fissues\u002F24",{"id":76,"question_zh":77,"answer_zh":78,"source_url":79},27749,"在 Conda 环境中执行 `pip install nlm-ingestor` 失败，提示 pandas 或 thinc 依赖冲突，如何解决？","建议在 Python 3.9 或 3.10 环境下使用 `venv` 而不是 `conda` 来创建虚拟环境，以避免依赖冲突。具体步骤如下：\n1. 创建虚拟环境：`python3.9 -m venv nlm-ingestor`\n2. 激活环境并安装依赖：`pip install nlm-ingestor llmsherpa ipython`\n3. 下载必要的 NLTK 数据：\n```python\nimport nltk\nnltk.download('punkt')\nnltk.download('stopwords')\n```\n4. 启动服务：`python -m nlm_ingestor.ingestion_daemon`","https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-ingestor\u002Fissues\u002F102",{"id":81,"question_zh":82,"answer_zh":83,"source_url":84},27750,"如何使用 HTML 解析器解析 HTML 文档？","这是一个已知代码缺陷，已在版本 0.1.5 中修复。如果您遇到 HTML 解析报错（如 `html_ingestor` 初始化失败），请将 `nlm-ingestor` 升级到最新版本（0.1.5 或更高）。升级后无需修改代码即可正常解析 HTML 文件。","https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-ingestor\u002Fissues\u002F6",{"id":86,"question_zh":87,"answer_zh":88,"source_url":89},27751,"nlm-ingestor 是否支持英语以外的其他语言文档？如何进行多语言 OCR？","支持非英语文档。对于其他语言的 OCR 需求（如保加利亚语等），可以通过训练或微调 Tesseract OCR 引擎来实现。您需要为特定语言准备训练数据并重新训练 Tesseract 模型，然后在 ingestor 配置中调用该自定义 OCR 模型。","https:\u002F\u002Fgithub.com\u002Fnlmatics\u002Fnlm-ingestor\u002Fissues\u002F88",{"id":91,"question_zh":92,"answer_zh":93,"source_url":69},27752,"我是 Python 用户，没有 Java 经验，每次使用 ingestor 都需要重新安装包或启动服务吗？","不需要每次重新安装包。您只需在安装阶段执行一次包的安装（步骤 1 和 3）。之后每次使用时，只需要启动 Tika 服务器和 ingestor 服务（步骤 2 和 4）即可。如果使用 Docker 镜像，则连服务启动也无需手动操作，容器会自动管理所有组件。",[95,99,104,108,113,118,123,128,133,138,143],{"id":96,"version":97,"summary_zh":18,"released_at":98},188661,"v0.1.9","2024-07-26T18:32:15",{"id":100,"version":101,"summary_zh":102,"released_at":103},188662,"v0.1.8","对 Dockerfile 进行了修改，以暴露端口，并更新了 Tika 的 JAR 文件。","2024-06-13T10:48:16",{"id":105,"version":106,"summary_zh":102,"released_at":107},188663,"v0.1.7","2024-06-12T13:59:56",{"id":109,"version":110,"summary_zh":111,"released_at":112},188664,"v0.1.6","Dockerfile 中的 Apple M1 支持","2024-02-09T02:17:59",{"id":114,"version":115,"summary_zh":116,"released_at":117},188665,"v0.1.5","修复了由于新的 bbox 代码导致的 HTML 导入问题。","2024-01-26T21:16:33",{"id":119,"version":120,"summary_zh":121,"released_at":122},188666,"v0.1.4","首个生产就绪版本，采用 Apache 2.0 许可证","2024-01-24T01:52:09",{"id":124,"version":125,"summary_zh":126,"released_at":127},188667,"v0.1.3","添加了用于 OCR 的 tesseeract，并移除了不需要的文件。","2024-01-24T01:14:29",{"id":129,"version":130,"summary_zh":131,"released_at":132},188668,"v0.1.2","首个基于 Apache 2.0 许可证的开源发布","2024-01-23T22:57:47",{"id":134,"version":135,"summary_zh":136,"released_at":137},188669,"v0.0.3","GitHub 上用于测试 Docker 的发布版本","2024-01-23T21:00:37",{"id":139,"version":140,"summary_zh":141,"released_at":142},188670,"v0.0.2","测试发布","2024-01-23T14:51:38",{"id":144,"version":145,"summary_zh":146,"released_at":147},188671,"v0.0.1-test","测试 Docker","2024-01-23T13:31:22",[149,159,167,176,184,193],{"id":150,"name":151,"github_repo":152,"description_zh":153,"stars":154,"difficulty_score":46,"last_commit_at":155,"category_tags":156,"status":61},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,"2026-04-06T06:32:30",[157,58,158,59],"Agent","图像",{"id":160,"name":161,"github_repo":162,"description_zh":163,"stars":164,"difficulty_score":46,"last_commit_at":165,"category_tags":166,"status":61},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[58,158,157],{"id":168,"name":169,"github_repo":170,"description_zh":171,"stars":172,"difficulty_score":60,"last_commit_at":173,"category_tags":174,"status":61},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",148568,"2026-04-09T23:34:24",[58,157,175],"语言模型",{"id":177,"name":178,"github_repo":179,"description_zh":180,"stars":181,"difficulty_score":60,"last_commit_at":182,"category_tags":183,"status":61},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108111,"2026-04-08T11:23:26",[58,158,157],{"id":185,"name":186,"github_repo":187,"description_zh":188,"stars":189,"difficulty_score":60,"last_commit_at":190,"category_tags":191,"status":61},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[192,157,158,58],"插件",{"id":194,"name":195,"github_repo":196,"description_zh":197,"stars":198,"difficulty_score":60,"last_commit_at":199,"category_tags":200,"status":61},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[192,58]]