OpenDataLoader PDF:專爲 RAG 設計的本地 PDF 解析器,CPU 每秒 100+ 頁
搭建 RAG 處理 PDF 文檔時,最頭疼的是讀取順序錯亂、表格結構丟失、沒法定位原文引用位置。OpenDataLoader PDF 專爲大語言模型設計,能準確提取文檔結構並轉換爲 Markdown 和 JSON 格式,每個元素都帶座標信息方便引用溯源。
基於規則算法而非 AI 模型,完全本地運行不依賴 GPU,單核 CPU 每秒處理 100+ 頁,相同輸入必定產生相同輸出——沒有模型幻覺問題。核心的 XY-Cut++ 算法正確處理多欄佈局的閱讀順序,表格檢測結合邊框分析和文本聚類保留行列結構,自動過濾頁眉頁腳。還內置 AI 安全過濾,自動剔除隱藏文本、水印等可能影響提示詞的內容。
提供 Python、Node.js、Java 和 Docker 多種 SDK,有官方 LangChain 集成包無縫接入 RAG 流程。對於複雜表格場景,還支持 Hybrid 混合模式——簡單頁面本地處理,複雜頁面路由到 AI 後端,表格準確率從 0.49 跳到 0.93。支持 Tagged PDF 語義結構提取和 LaTeX 公式識別。
项目背景
搭建 RAG 處理 PDF 文档时,最頭疼的几个問題:读取顺序错乱(多栏布局從左到右跨栏读取)、表格结構丢失(行列關系消失)、没法定位原文引用位置(缺少坐標信息)、云端 API 的隐私顾虑。OpenDataLoader PDF 專為大语言模型設計,逐一解决這些痛點。
核心技術
XY-Cut++ 阅读顺序算法
多栏布局是 PDF 解析的經典难題。XY-Cut++ 是經典 XY-Cut 算法的增强版,能正确識别多栏文档的阅读顺序,不再出現跨栏乱序读取的問題。在 benchmark 中 Reading Order 得分達到 0.91(纯本地模式)/ 0.94(混合模式)。
表格检測與提取
结合两种策略:
- **边框分析**:检測表格线条還原行列结構
- **文本聚类**:對无边框表格通過文本位置聚类推断结構
- 支持合並单元格處理
- 纯本地模式表格準确率 0.49,開启 Hybrid 模式後跳到 0.93(+90%)
坐標信息(Bounding Box)
每个提取的元素(標題、段落、表格、列表、图片、標題)都包含 `[x1, y1, x2, y2]` 坐標,精确到 PDF 點。這對 RAG 引用溯源至關重要——用户問問題时可以精确指向原文位置。
AI 安全過滤
PDF 可以包含隐藏的 prompt injection 攻击内容。OpenDataLoader 默認自動過滤:
- 透明/零尺寸隐藏文本
- 页面外内容
- 可疑的不可见图层
- 水印
Tagged PDF 支持
随着欧洲无障碍法案(EAA)2025年6月生效,越來越多 PDF 带有语義结構標签。OpenDataLoader 是少數完全支持 Tagged PDF 的解析器,能直接提取作者標注的精确布局结構。
性能基準
| 引擎 | 综合 | 阅读顺序 | 表格 | 標題 | 速度(秒/页) |
|------|------|---------|------|------|-----------|
| **OpenDataLoader** | 0.72 | 0.91 | 0.49 | 0.76 | **0.05** |
| **OpenDataLoader [hybrid]** | **0.90** | **0.94** | **0.93** | 0.83 | 0.43 |
| docling | 0.86 | 0.90 | 0.89 | 0.80 | 0.73 |
| marker | 0.83 | 0.89 | 0.81 | 0.80 | 53.93 |
| mineru | 0.82 | 0.86 | 0.87 | 0.74 | 5.96 |
| pymupdf4llm | 0.57 | 0.89 | 0.40 | 0.41 | 0.09 |
纯本地模式速度碾压(0.05秒/页 vs marker 的 54秒/页),Hybrid 模式综合準确率最高。
输出格式
| 格式 | 用途 |
|------|------|
| JSON | 结構化數據,含坐標、语義类型、字體信息 |
| Markdown | 干净文本,适合 LLM 上下文和 RAG 分块 |
| HTML | 带样式的 Web 展示 |
| Annotated PDF | 可视化调試,查看检測到的结構 |
JSON 输出示例:每个元素包含 type(heading/paragraph/table/list/image/caption)、id、page number、bounding box、font 信息和 content。
多语言 SDK
Python
pip install -U opendataloader-pdf
import opendataloader_pdf
opendataloader_pdf.convert(input_path="doc.pdf", output_dir="output/", format="markdown,json")
Node.js
npm install @opendataloader/pdf
Java
Maven Central 上的 `org.opendataloader:opendataloader-pdf-core`
Docker
docker pull ghcr.io/opendataloader-project/opendataloader-pdf-cli
LangChain 集成
pip install -U langchain-opendataloader-pdf
from langchain_opendataloader_pdf import OpenDataLoaderPDFLoader
loader = OpenDataLoaderPDFLoader(file_path=["document.pdf"], format="text")
documents = loader.load()
官方 LangChain 文档有集成指南。
Hybrid 混合模式
對于复杂表格或 OCR 需求,開启混合模式:
- 簡单页面继续本地快速處理
- 复杂页面路由到 AI 後端(如 docling-serve)
- 後端不可用时自動 fallback 到本地處理
- Docker 部署後端可保持 100% 本地化
還支持 LaTeX 公式提取和 AI 图片描述生成(使用 SmolVLM 256M 轻量视觉模型)。
适用場景
- 文档問答系統 / 知識库搭建
- 法律、医疗、金融等隐私敏感行業的文档處理
- 大規模 PDF 批量转换(千级文档高效處理)
- 需要引用溯源的 RAG 系統
协议:Mozilla Public License 2.0