返回项目

OpenDataLoader PDF

如 PDF 丢给 LLM 总是乱码或丢表格,需要一个准确率高的 PDF → Markdown/JSON 解析器来准备 RAG 上下文,可以采用这个仓库。

OpenDataLoader PDF 是一个把 PDF 转成 AI 可用的结构化数据(Markdown、JSON with bounding boxes、HTML)的解析器。作者给的定位原文是:「PDF Parser for AI-ready data. Automate PDF accessibility. Open-source.」

它解决的核心问题是:把 PDF 直接扔给 LLM,通常会遇到表格丢失、多栏错位、扫描件无法识别、公式变乱码等问题。OpenDataLoader PDF 在 200 份真实 PDF(含多栏、科学论文)的 benchmark 上拿到 0.907 综合分和 0.928 的表格准确率,目前排第一。

两种运行模式

本地模式(确定性,不调外部 API):

python
import opendataloader_pdf

opendataloader_pdf.convert(
    input_path=["file1.pdf", "file2.pdf", "folder/"],
    output_dir="output/",
    format="markdown,json"
)

核心引擎是 Java,通过 Python SDK 调用。大部分常规 PDF(文本型、单栏、简单表格)用本地模式就够了,速度快、完全离线、结果可复现。

混合模式(本地 + AI 后端,处理复杂页面):

bash
# 启动 AI 后端
opendataloader-pdf-hybrid --port 5002

# 处理 PDF
opendataloader-pdf --hybrid docling-fast file1.pdf file2.pdf folder/

遇到扫描件、复杂表格、公式、图表时自动切到 AI 后端处理。本地引擎先做一轮结构识别,识别不了的页面才送 AI,所以大部分页面仍然是本地处理,只有少数复杂页走模型。

输出格式

  • Markdown:保留阅读顺序和层级结构,适合直接做 RAG chunking
  • JSON:每个元素带 bounding box 坐标,适合需要定位信息的场景(标注、UI 渲染)
  • HTML:保留原始排版,适合需要视觉还原的场景

三种格式可以同时输出,一次解析多种用途。

在 RAG 场景里的用法

典型链路是 PDF → OpenDataLoader → Markdown → chunking → 向量化 → 检索。

相比直接用 PyPDF2 / pdfplumber 等工具提取文本,OpenDataLoader 的优势在于:

  • 表格会被转成 Markdown 表格格式,而不是把所有单元格拼成一行纯文本
  • 多栏文档会按阅读顺序重排,不会左右列混在一起
  • 页眉页脚、页码等噪音会被过滤掉
  • 内置 prompt injection 安全过滤

对 RAG 的影响是:chunk 质量更高 → 检索命中率更高 → 最终 LLM 回答更准。

适用场景

  • 搭建 RAG 系统,需要把大量 PDF 转成 Markdown 做向量化
  • 处理复杂 PDF(科学论文、财报、多栏排版、扫描件)
  • 需要 bounding box 坐标做 PDF 标注或 UI 定位
  • PDF 无障碍合规(EAA、ADA、Section 508),自动生成 Tagged PDF

不适用的情况

  • 只有几个简单的纯文本 PDF,PyPDF2 一行代码就能搞定
  • 需要编辑 PDF 内容(OpenDataLoader 是只读解析,不做写入)
  • 需要实时流式处理(它是批处理模式,不适合每秒处理几百页的场景)

安装

bash
pip install -U opendataloader-pdf

也提供 Node.js / TypeScript SDK:

bash
npm install opendataloader-pdf

核心引擎是 Java,Python SDK 会自动管理 Java 进程,不需要手动装 JDK(SDK 内嵌了运行时)。

License:Apache-2.0。

语言

Java

分类

上下文工程

许可证

Apache-2.0

更新时间

4/12/2026

标签

pdfdocument-parsermarkdownragocrtable-extractionai-readyaccessibilitybounding-boxcontext-engineering
~/安装方式

# source

$pip install -U opendataloader-pdf
$npm install opendataloader-pdf

# usage

$import opendataloader_pdf; opendataloader_pdf.convert(input_path=['file.pdf'], output_dir='output/', format='markdown,json')
$opendataloader-pdf --hybrid docling-fast file.pdf