开源项目

opendataloader-pdf

opendataloader-pdf

专为AI数据提取设计的PDF解析器,输出结构化Markdown/JSON(含边界框),支持RAG/LLM管道。混合模式下用AI处理复杂表格、公式、扫描件,综合解析准确率0.907,排名第一。与PDF Association合作,首次开源实现PDF自动标签生成(Tagged PDF),可验证的PDF/UA合规流程,大幅降低无障碍改造成本。Apache 2.0许可,本地运行无数据外传。

README

OpenDataLoader PDF

面向 AI 的 PDF 解析器。自动化 PDF 无障碍。开源。

License PyPI version npm version Maven Central Java

opendataloader-project%2Fopendataloader-pdf | Trendshift

🔍 面向 AI 数据提取的 PDF 解析器 — 从任意 PDF 中提取 Markdown、JSON(含边界框)和 HTML。基准测试排名第 1(总体 0.907)。确定性本地模式 + AI 混合模式可处理复杂页面。

  • 准确性如何? — 基准测试第 1:总体 0.907,表格准确性 0.928(基于 200 份真实 PDF,包括多列和学术论文)。确定性本地模式 + AI 混合模式用于复杂页面(基准测试)
  • 支持扫描 PDF 和 OCR 吗? — 是的。混合模式下内置 OCR(80+ 种语言)。可在 300 DPI+ 的低质量扫描件上工作(混合模式)
  • 支持表格、公式、图像、图表吗? — 是的。复杂/无边框表格、LaTeX 公式以及 AI 生成的图片/图表描述均通过混合模式实现(混合模式)
  • 如何用于 RAG? — pip install opendataloader-pdf,3 行代码转换。输出结构化 Markdown 用于分块,JSON 含边界框用于来源引用,以及 HTML。提供 LangChain 集成。Python、Node.js、Java SDK(快速入门 | LangChain)

♿ PDF 无障碍自动化 — 大规模将未标记 PDF 自动标记为可供屏幕阅读器使用的 Tagged PDF。第一个端到端生成 Tagged PDF 的开源工具。

  • 问题是什么? — 无障碍法规现在在全球范围内强制执行。手动 PDF 修复成本为每份文档 50-200 美元,且无法规模化(法规)
  • 哪些是免费的? — 布局分析 + 自动标记(Apache 2.0)。输入未标记 PDF → 输出 Tagged PDF。无专有 SDK 依赖(自动标记)
  • PDF/UA 合规性呢? — 将 Tagged PDF 转换为 PDF/UA-1 或 PDF/UA-2 是企业附加功能。自动标记生成 Tagged PDF;PDF/UA 导出是最后一步(流水线)
  • 为什么信任这个? — 与 Dual Lab(veraPDF 开发者)合作开发,基于 PDF Association 规范、最佳实践指南和 PDF 社区 的专业知识。自动标记遵循 Well-Tagged PDF 规范,并通过 veraPDF 验证(合作)

30 秒快速入门

要求:Java 11+ 和 Python 3.10+(也支持 Node.js | Java)

开始前:运行 java -version。如果未找到,请从 Adoptium 安装 JDK 11+。

pip install -U opendataloader-pdf
import opendataloader_pdf

# 单次调用批量处理所有文件 — 每次 convert() 会启动一个 JVM 进程,因此重复调用会很慢
opendataloader_pdf.convert(
    input_path=["file1.pdf", "file2.pdf", "folder/"],
    output_dir="output/",
    format="markdown,json"
)

OpenDataLoader PDF 布局分析 — 检测到标题、表格、图像并带有边界框

带标注的 PDF 输出 — 每个元素(标题、段落、表格、图像)都检测到边界框和语义类型。

解决了哪些问题?

问题 解决方案 状态
解析过程中 PDF 结构丢失 — 阅读顺序错误、表格损坏、无元素坐标 确定性本地模式将 PDF 转换为带有边界框的 Markdown/JSON,XY-Cut++ 阅读顺序 已发布
复杂表格、扫描 PDF、公式、图表需要 AI 级理解 混合模式将复杂页面路由到 AI 后端(基准测试第 1) 已发布
手动 PDF 修复成本 — 无障碍法规(EAA、ADA、Section 508)要求 Tagged PDF。手动修复成本为每份文档 50-200 美元 自动将未标记 PDF 标记为 Tagged PDF(免费,Apache 2.0)。为 PDF/UA 工作流奠定基础;完整的 PDF/UA-1/2 导出是企业附加功能 自动标记:已发布。PDF/UA 导出:企业版

能力矩阵

能力 支持 层级
数据提取
以正确阅读顺序提取文本 是 免费
每个元素的边界框 是 免费
表格提取(简单边框) 是 免费
表格提取(复杂/无边框) 是 免费(混合模式)
标题层级检测 是 免费
列表检测(编号、项目符号、嵌套) 是 免费
带坐标的图像提取 是 免费
AI 图表/图像描述 是 免费(混合模式)
扫描 PDF 的 OCR 是 免费(混合模式)
公式提取(LaTeX) 是 免费(混合模式)
Tagged PDF 结构提取 是 免费
AI 安全(提示注入过滤) 是 免费
页眉/页脚/水印过滤 是 免费
无障碍
自动标记 → 将未标记 PDF 转换为 Tagged PDF 是 免费(Apache 2.0)
PDF/UA-1、PDF/UA-2 导出 💼 可用 企业版
无障碍工作室(可视化编辑器) 💼 可用 企业版
局限性
处理 Word/Excel/PPT 否 —
需要 GPU 否 —

提取基准测试

opendataloader-pdf [hybrid] 整体(0.907)排名第 1,涵盖阅读顺序、表格和标题提取准确性。

引擎 总体 阅读顺序 表格 标题 速度(秒/页) 许可证
opendataloader [hybrid] 0.907 0.934 0.928 0.821 0.463 Apache-2.0
nutrient 0.885 0.925 0.708 0.819 0.008 商业
docling 0.882 0.898 0.887 0.824 0.762 MIT
marker 0.861 0.890 0.808 0.796 53.932 GPL-3.0
unstructured [hi_res] 0.841 0.904 0.588 0.749 3.008 Apache-2.0
edgeparse 0.837 0.894 0.717 0.706 0.036 Apache-2.0
opendataloader 0.831 0.902 0.489 0.739 0.015 Apache-2.0
mineru 0.831 0.857 0.873 0.743 5.962 AGPL-3.0
pymupdf4llm 0.732 0.885 0.401 0.412 0.091 AGPL-3.0
unstructured 0.686 0.882 0.000 0.388 0.077 Apache-2.0
markitdown 0.589 0.844 0.273 0.000 0.114 MIT
liteparse 0.576 0.866 0.000 0.000 1.061 Apache-2.0

分数归一化到 [0, 1]。准确性越高越好;速度越低越好。加粗 = 最优。完整基准测试细节

基准测试

质量分解

应该使用哪种模式?

您的文档 模式 安装 服务端命令 客户端命令
标准数字 PDF 快速(默认) pip install opendataloader-pdf 无需 opendataloader-pdf file1.pdf file2.pdf folder/
复杂或嵌套表格 混合模式 pip install "opendataloader-pdf[hybrid]" opendataloader-pdf-hybrid --port 5002 opendataloader-pdf --hybrid docling-fast file1.pdf file2.pdf folder/
扫描 / 基于图像的 PDF 混合模式 + OCR pip install "opendataloader-pdf[hybrid]" opendataloader-pdf-hybrid --port 5002 --force-ocr opendataloader-pdf --hybrid docling-fast file1.pdf file2.pdf folder/
非英语扫描 PDF 混合模式 + OCR pip install "opendataloader-pdf[hybrid]" opendataloader-pdf-hybrid --port 5002 --force-ocr --ocr-lang "ko,en" opendataloader-pdf --hybrid docling-fast file1.pdf file2.pdf folder/
数学公式 混合模式 + 公式 pip install "opendataloader-pdf[hybrid]" opendataloader-pdf-hybrid --enrich-formula opendataloader-pdf --hybrid docling-fast --hybrid-mode full file1.pdf file2.pdf folder/
需要描述的图表 混合模式 + 图片 pip install "opendataloader-pdf[hybrid]" opendataloader-pdf-hybrid --enrich-picture-description opendataloader-pdf --hybrid docling-fast --hybrid-mode full file1.pdf file2.pdf folder/
需要无障碍的未标记 PDF 自动标记 → Tagged PDF pip install opendataloader-pdf 无需 opendataloader-pdf --format tagged-pdf file1.pdf file2.pdf folder/

快速入门

Python

pip install -U opendataloader-pdf
import opendataloader_pdf

# 单次调用批量处理所有文件 — 每次 convert() 会启动一个 JVM 进程,因此重复调用会很慢
opendataloader_pdf.convert(
    input_path=["file1.pdf", "file2.pdf", "folder/"],
    output_dir="output/",
    format="markdown,json"
)

Node.js

npm install @opendataloader/pdf
import { convert } from '@opendataloader/pdf';

await convert(['file1.pdf', 'file2.pdf', 'folder/'], {
  outputDir: 'output/',
  format: 'markdown,json'
});

Java

<dependency>
  <groupId>org.opendataloader</groupId>
  <artifactId>opendataloader-pdf-core</artifactId>
</dependency>

Python 快速入门 | Node.js 快速入门 | Java 快速入门

混合模式:复杂 PDF 的 #1 准确性

混合模式结合了快速的本地 Java 处理与 AI 后端。简单页面留在本地处理(0.02 秒);复杂页面路由到 AI 以获得 +90% 的表格准确性。

pip install -U "opendataloader-pdf[hybrid]"

终端 1 — 启动后端服务器:

opendataloader-pdf-hybrid --port 5002

终端 2 — 处理 PDF:

# 单次调用批量处理所有文件 — 每次调用会启动一个 JVM 进程,因此重复调用会很慢
opendataloader-pdf --hybrid docling-fast file1.pdf file2.pdf folder/

Python:

# 单次调用批量处理所有文件 — 每次 convert() 会启动一个 JVM 进程,因此重复调用会很慢
opendataloader_pdf.convert(
    input_path=["file1.pdf", "file2.pdf", "folder/"],
    output_dir="output/",
    hybrid="docling-fast"
)

扫描 PDF 的 OCR

对于没有可选文本的基于图像的 PDF,使用 --force-ocr 启动后端:

opendataloader-pdf-hybrid --port 5002 --force-ocr

对于非英语文档,指定语言:

opendataloader-pdf-hybrid --port 5002 --force-ocr --ocr-lang "ko,en"

支持的语言:en、ko、ja、ch_sim、ch_tra、de、fr、ar 等。

公式提取(LaTeX)

从科学 PDF 中提取数学公式为 LaTeX:

# 服务器:启用公式增强
opendataloader-pdf-hybrid --enrich-formula

# 单次调用批量处理所有文件 — 每次调用会启动一个 JVM 进程,因此重复调用会很慢
opendataloader-pdf --hybrid docling-fast --hybrid-mode full file1.pdf file2.pdf folder/

JSON 输出:

{
  "type": "formula",
  "page number": 1,
  "bounding box": [226.2, 144.7, 377.1, 168.7],
  "content": "\\frac{f(x+h) - f(x)}{h}"
}

注意:公式和图片描述增强需要在客户端使用 --hybrid-mode full。

图表和图像描述

为图表和图像生成 AI 描述 — 有助于 RAG 搜索和无障碍替代文本:

# 服务器
opendataloader-pdf-hybrid --enrich-picture-description

# 单次调用批量处理所有文件 — 每次调用会启动一个 JVM 进程,因此重复调用会很慢
opendataloader-pdf --hybrid docling-fast --hybrid-mode full file1.pdf file2.pdf folder/

JSON 输出:

{
  "type": "picture",
  "page number": 1,
  "bounding box": [72.0, 400.0, 540.0, 650.0],
  "description": "A bar chart showing waste generation by region from 2016 to 2030..."
}

使用 SmolVLM (256M),一个轻量级视觉模型。通过 --picture-description-prompt 支持自定义提示词。

Hancom Data Loader 集成 — 即将推出

通过 Hancom Data Loader 实现企业级 AI 文档分析 — 客户定制的模型,针对特定领域文档进行训练。30 多种元素类型(表格、图表、公式、标题、脚注等),基于 VLM 的图像/图表理解,复杂表格提取(合并单元格、嵌套表格),有 SLA 保障的扫描文档 OCR,以及原生 HWP/HWPX 支持。支持 PDF、DOCX、XLSX、PPTX、HWP、PNG、JPG。在线演示

混合模式指南

输出格式

格式 使用场景
JSON 包含边界框、语义类型的结构化数据
Markdown 用于 LLM 上下文的整洁文本,RAG 分块
HTML 带有样式的网页显示
带标注的 PDF 可视化调试 — 查看检测到的结构(示例)
文本 纯文本提取

组合格式:format="json,markdown"

JSON 输出示例

{
  "type": "heading",
  "id": 42,
  "level": "Title",
  "page number": 1,
  "bounding box": [72.0, 700.0, 540.0, 730.0],
  "heading level": 1,
  "font": "Helvetica-Bold",
  "font size": 24.0,
  "text color": "[0.0]",
  "content": "Introduction"
}
字段 描述
type 元素类型:heading(标题)、paragraph(段落)、table(表格)、list(列表)、image(图像)、caption(标题)、formula(公式)
id 用于交叉引用的唯一标识符
page number 从 1 开始的页码引用
bounding box PDF 点单位中的 [left, bottom, right, top](72pt = 1 英寸)
heading level 标题深度(1+)
content 提取的文本

完整的 JSON Schema

高级功能

Tagged PDF 支持

当 PDF 具有结构标签时,OpenDataLoader 提取作者预期的精确布局 — 无需猜测,无需启发式方法。标题、列表、表格和阅读顺序均从源文件保留。

输出质量取决于标签质量。 并非所有 Tagged PDF 都标记良好。对于标签稀疏或不正确的 PDF,默认的启发式模式或 --hybrid docling-fast 通常能产生更好的结果。

# 单次调用批量处理所有文件 — 每次 convert() 会启动一个 JVM 进程,因此重复调用会很慢
opendataloader_pdf.convert(
    input_path=["file1.pdf", "file2.pdf", "folder/"],
    output_dir="output/",
    use_struct_tree=True           # 使用原生 PDF 结构标签
)

大多数 PDF 解析器完全忽略结构标签。了解更多

AI 安全:提示注入保护

PDF 可能包含隐藏的提示注入攻击。OpenDataLoader 自动过滤:

  • 隐藏文本(透明、零号字体)
  • 页面外内容
  • 可疑的不可见图层

要清理敏感数据(电子邮件、URL、电话号码 → 占位符),请显式启用:

# 单次调用批量处理所有文件 — 每次调用会启动一个 JVM 进程,因此重复调用会很慢
opendataloader-pdf file1.pdf file2.pdf folder/ --sanitize

AI 安全指南

LangChain 集成

pip install -U langchain-opendataloader-pdf
from langchain_opendataloader_pdf import OpenDataLoaderPDFLoader

loader = OpenDataLoaderPDFLoader(
    file_path=["file1.pdf", "file2.pdf", "folder/"],
    format="text"
)
documents = loader.load()

LangChain 文档 | GitHub | PyPI

高级选项

# 单次调用批量处理所有文件 — 每次 convert() 会启动一个 JVM 进程,因此重复调用会很慢
opendataloader_pdf.convert(
    input_path=["file1.pdf", "file2.pdf", "folder/"],
    output_dir="output/",
    format="json,markdown,pdf",
    image_output="embedded",        # "off"、"embedded"(Base64)或 "external"(默认)
    image_format="jpeg",            # "png" 或 "jpeg"
    use_struct_tree=True,           # 使用原生 PDF 结构
)

完整的 CLI 选项参考

PDF 无障碍与 PDF/UA 转换

问题:数百万现有的 PDF 缺乏结构标签,无法满足无障碍法规(EAA、ADA/Section 508、韩国数字包容法案)。手动修复成本为每份文档 50-200 美元,且无法规模化。

OpenDataLoader 的方法:与 PDF Association 和 Dual Lab(veraPDF 的开发者,veraPDF 是行业参考的开源 PDF/A 和 PDF/UA 验证器)合作构建。自动标记遵循 Well-Tagged PDF 规范,并通过 veraPDF 进行程序化验证 — 自动进行符合性检查,无需人工审查。现有的开源工具没有一个能够端到端生成 Tagged PDF — 大多数依赖专有 SDK 进行标签写入。OpenDataLoader 在 Apache 2.0 下完成所有这些工作。(合作详情)

法规 截止日期 要求
欧洲无障碍法案(EAA) 2025 年 6 月 28 日 欧盟境内可访问的数字产品
ADA 与 Section 508 已生效 美国联邦机构和公共住宿
数字包容法案 已生效 韩国数字服务无障碍

标准与验证

方面 详情
规范 PDF Association 的 Well-Tagged PDF
验证 veraPDF — 行业参考的开源 PDF/A 和 PDF/UA 验证器
合作 PDF Association + Dual Lab(veraPDF 开发者)共同开发标记和验证
许可证 自动标记 → Tagged PDF:Apache 2.0(免费)。PDF/UA 导出:企业版

无障碍流水线

步骤 功能 状态 层级
1. 审计 读取现有 PDF 标签,检测未标记的 PDF 已发布 免费
2. 自动标记 → Tagged PDF 为未标记的 PDF 生成结构标签 已发布 免费(Apache 2.0)
3. 导出 PDF/UA 转换为符合 PDF/UA-1 或 PDF/UA-2 的文件 💼 可用 企业版
4. 可视化编辑 无障碍工作室 — 审查和修复标签 💼 可用 企业版

💼 企业功能可按需提供。联系我们 开始。

自动标记

从未标记的 PDF 生成 Tagged PDF — 输出是一个带有结构标签(标题、段落、列表、表格、阅读顺序)、可被屏幕阅读器读取的 PDF。

import opendataloader_pdf

# 未标记 PDF 输入 → Tagged PDF 输出
opendataloader_pdf.convert(
    input_path=["file1.pdf", "file2.pdf", "folder/"],
    output_dir="output/",
    format="tagged-pdf"
)
# CLI
opendataloader-pdf --format tagged-pdf file1.pdf file2.pdf folder/

与其他格式组合:format="json,tagged-pdf"。

端到端合规工作流

现有 PDF(未标记)
    │
    ▼
┌─────────────────┐    ┌──────────────────┐    ┌─────────────────┐    ┌──────────────────┐
│  1. 审计        │───>│  2. 自动标记     │───>│  3. 导出        │───>│  4. 工作室       │
│  (检查标签)    │    │  (→ Tagged PDF) │    │  (PDF/UA)      │    │  (可视化编辑器)  │
└─────────────────┘    └──────────────────┘    └─────────────────┘    └──────────────────┘
        │                       │                       │                      │
        ▼                       ▼                       ▼                      ▼
  use_struct_tree      format="tagged-pdf"        PDF/UA export       无障碍工作室
  (现已可用)          (可用,Apache 2.0)         (企业版)           (企业版)

PDF 无障碍指南

路线图

功能 时间线 层级
Hancom Data Loader — 企业级 AI 文档分析、客户定制模型、基于 VLM 的图表/图像理解、生产级 OCR 2026 年第二至第三季度 计划中
结构验证 — 验证 PDF 标签树 2026 年第三季度 计划中

完整路线图

常见问题

用于 RAG 的最佳 PDF 解析器是什么?

对于 RAG 流水线,您需要一个能够保留文档结构、保持正确阅读顺序并提供元素坐标用于引用的解析器。OpenDataLoader 专门为此设计 — 它输出带有边界框的结构化 JSON,使用 XY-Cut++ 处理多列布局,并在本地运行无需 GPU。在混合模式下,它在基准测试中总体排名第 1(0.907)。

最佳的开源 PDF 解析器是什么?

OpenDataLoader PDF 是唯一结合了以下特性的开源解析器:基于规则的确定性提取(无需 GPU)、每个元素的边界框、XY-Cut++ 阅读顺序、内置 AI 安全过滤器、原生 Tagged PDF 支持以及用于复杂文档的 AI 混合模式。它在本地 CPU 上运行,总体准确性排名第 1(0.907)。

如何从 PDF 中提取表格供 LLM 使用?

OpenDataLoader 通过边框分析和文本聚类检测表格,保留行/列结构。对于复杂表格,启用混合模式可将准确性提升 +90%(0.489 到 0.928 TEDS 分数):

# 单次调用批量处理所有文件 — 每次 convert() 会启动一个 JVM 进程,因此重复调用会很慢
opendataloader_pdf.convert(
    input_path=["file1.pdf", "file2.pdf", "folder/"],
    output_dir="output/",
    format="json",
    hybrid="docling-fast"           # 用于复杂表格
)

与 docling、marker 或 pymupdf4llm 相比如何?

OpenDataLoader [hybrid] 在阅读顺序、表格和标题准确性方面总体排名第 1(0.907)。关键区别:docling (0.882) 很强但缺乏边界框和 AI 安全过滤器。marker (0.861) 需要 GPU 且慢 1000 倍(53.932 秒/页)。pymupdf4llm (0.732) 速度快但表格(0.401)和标题(0.412)准确性差。OpenDataLoader 是唯一结合确定性本地提取、每个元素的边界框和内置提示注入保护的解析器。查看完整基准测试。

我可以在不将数据发送到云端的情况下使用它吗?

是的。OpenDataLoader 100% 本地运行。无 API 调用,无数据传输 — 您的文档永远不会离开您的环境。混合模式后端

开源项目opendataloader-project2026-06-03原文

相关内容