乐于分享
好东西不私藏

用了 PDF-Extract-Kit,PDF 内容提取终于不那么折腾了

用了 PDF-Extract-Kit,PDF 内容提取终于不那么折腾了

一、从复制公式乱码说起

上周我写论文参考文献的时候,打开一篇 PDF 论文,想引用一段公式。

选中,复制,粘贴到 Notion——

好家伙,每个换行都变成了一个独立段落,公式变成了方框加乱码,表格里的数据挤成一坨,标题和正文的层级关系全没了。我花了十分钟重新排版,才把那段内容整理好。

说实话,每次从 PDF 里复制内容我都想摔键盘。

这不是个例。学术论文、技术文档、财务报告,PDF 在"展示"上做得很好,但"让你把内容拿出去"这件事,基本是铁板一块。

你遇到过这些场景吗?

  • 从论文里复制公式,粘贴出来全是乱码,只能手动重新敲一遍 LaTeX
  • 把 PDF 表格复制到 Excel,表格结构全乱,合并单元格变成一堆空行
  • 扫描版 PDF 直接就是图片,文字根本选不了
  • 在线 PDF 提取工具,上传文件后担心隐私泄露,免费版还有页数限制

我试过不少解法。Adobe Acrobat 太贵,ABBYY 的识别确实好但价格劝退,开源工具要么只做 OCR 要么只做文本提取,没有一个能一步到位。

后来发现了 PDF-Extract-Kit,试了试,确实比我想象中好不少。

二、PDF 内容提取,为什么这么难?

先说清楚一个问题:为什么 PDF 提取内容这么费劲?

因为 PDF 设计的初衷就不是让你提取内容的。

PDF 的全称是 Portable Document Format,核心目标是"跨平台显示一致"——Windows 上打开一个 PDF,和 Mac 上打开,排版一模一样。为了实现这个目标,PDF 把文字、图片、线条、形状都渲染成固定位置的内容。文字可能被编码成图形路径,表格可能只是画了几条线,公式可能只是嵌入的图片。

不同软件生成的 PDF 格式差异巨大。Word 导出的 PDF 和 LaTeX 编译的 PDF,底层结构完全不同。扫描版 PDF 本质上是图片合集,里面根本没有文字信息。

所以"从 PDF 里提取内容"这件事,本质上是一场逆向工程——你要从一张"已经渲染好的图"里,还原出文字、表格、公式、标题层级这些结构化信息。

现有的方案各有各的问题:

  • 在线工具: 方便,但上传敏感文档有隐私风险,免费版限制多
  • 付费软件: Adobe Acrobat 和 ABBYY 是好用,但个人用户真的掏那个钱吗?
  • 开源方案: 大多只解决单一问题——纯 OCR 只能认文字,纯文本提取遇到公式就歇菜

PDF-Extract-Kit 的解法不一样。 它把 PDF 内容提取的每个环节,都用一个专业模型去处理,然后模块化组合,按需使用。

三、PDF-Extract-Kit 是什么?

PDF-Extract-Kit 项目Logo
图:PDF-Extract-Kit GitHub 项目主页,当前 Star 数 10k+(来源:官方 GitHub 仓库)

PDF-Extract-Kit 是由 OpenDataLab(上海 AI 实验室) 开发的开源 PDF 内容提取工具箱。GitHub 上目前有 10k+ Star

项目地址:https://github.com/opendatalab/PDF-Extract-Kit

它能做的比"读取 PDF"多得多:把 PDF 里的文字、表格、公式、图片都提取出来,是一个模块化工具箱。

设计思路是:PDF 内容提取太复杂了,没有任何一个模型能同时做好所有事情。所以把整个过程拆成几个独立环节,每个环节用该领域最成熟的模型去处理:

功能模块
用的模型
做什么
布局检测
DocLayout-YOLO
识别 PDF 页面上哪些是标题、正文、表格、图片、公式
公式检测
YOLOv8
定位行内公式和独立公式的位置
公式识别
UniMERNet
把公式图像转成 LaTeX 源码
OCR
PaddleOCR
从图像中提取文字(含位置信息)
表格识别
StructEqTable
把表格图像转成 LaTeX / HTML / Markdown
阅读顺序排序
即将推出
恢复文档的自然阅读顺序

你可以只用来做公式识别,也可以串联所有模块做全量提取。每个模块可以独立使用,也可以组合使用。

四、五大核心能力逐个看

4.1 布局检测:让模型看懂 PDF 的"骨架"

布局检测是 PDF-Extract-Kit 的第一步,也是最关键的一步。

DocLayout-YOLO 模型会对 PDF 页面做语义分割——不只是把整页扫成一张图,而是识别出每个区域是什么类型:标题、正文、图片、表格、公式、页眉页脚、页码。

布局检测效果对比:原 PDF vs 检测标注结果
图:左为原 PDF 页面,右为布局检测结果(不同颜色框标注了标题、正文、表格、图片等区域)

对于标准排版的论文,标题/正文/公式/图片的边界识别很准确。后续的 OCR 和公式识别可以"按区域处理"——不会把标题里的文字当成正文,也不会把表格里的数字当成普通文本。

4.2 公式检测 + 公式识别:论文党的福音

这是我觉得 PDF-Extract-Kit 最大的亮点。

公式检测(YOLOv8) 负责定位 PDF 中的公式位置,区分行内公式和独立公式。公式识别(UniMERNet) 负责把公式图像转成 LaTeX 源码。

什么意思呢?你选中论文里的一个公式,工具把它识别出来,然后输出 LaTeX 代码——你直接复制到 Overleaf 里就能编译。

公式检测效果:PDF 页面中的公式定位
图:原 PDF 中的公式(左)→ UniMERNet 识别出的 LaTeX 源码(中)→ 重新渲染的效果(右)

我拿了三篇 arXiv 论文测试,对于标准排版(求和、积分、矩阵、分式等),识别正确率很高。输出的 LaTeX 代码基本可以直接用,只需要微调少量格式。

写论文的时候遇到参考文献里的公式,以前要么手动重新敲一遍 LaTeX,要么截图贴进去。现在一键提取,省下来的时间够写半页正文了。

4.3 OCR:扫描版 PDF 也能提取文字

基于 PaddleOCR 的 OCR 模块,支持中英文混合识别。

对于扫描版 PDF(书籍、历史文档、扫描的合同),OCR 是唯一能把文字提取出来的方式。PaddleOCR 的中文识别能力在开源方案里是第一梯队,英文识别同样不错。

输出结果带有位置信息,可以知道每个文字块在原 PDF 中的坐标——这对后续的阅读顺序排序和段落重组很关键。

4.4 表格识别:PDF 里的表格终于能拿出来了

表格提取一直是 PDF 处理的难点。因为 PDF 里的表格本质上是一堆线条和文字的组合,没有"行"和"列"的概念。

StructEqTable 模型做的事情是:检测表格区域,识别表格结构(行、列、合并单元格),然后按结构输出。

支持三种输出格式:

  • LaTeX: 适合学术场景,直接插入论文
  • HTML: 适合网页展示
  • Markdown: 适合笔记工具(Obsidian、Notion 等)
表格提取效果:PDF 中的表格区域检测
图:原 PDF 中的表格(左)→ 提取后输出的 Markdown 格式(右)

对于行列规整的简单表格,还原度基本完美。对于复杂表格(多层合并单元格、跨页表格),偶尔会有结构识别错误,但整体可用性已经很高了。

4.5 模块化可组合

这是 PDF-Extract-Kit 的设计亮点。

通过修改配置文件,你可以自由组合不同的模块。比如:

  • 我只想用公式识别,只加载 UniMERNet,不加载其他模块
  • 我要全量提取,串联布局检测 + OCR + 表格识别 + 公式识别
  • 我只要表格,只开表格检测和识别

这种"按需取用"的灵活性,在不同场景下可以避免浪费资源。

五、上手实测:安装、配置、跑起来

下面是我的实际体验。

环境准备

PDF-Extract-Kit 基于 Python 3.10 + PyTorch,安装方式很标准:

1
2
3
conda create -n pdf-extract-kit-1.0 python=3.10conda activate pdf-extract-kit-1.0pip install -r requirements.txt

如果没有 GPU,可以换成 CPU 版本的依赖文件。当然,速度会慢不少。

关于硬件:我的测试环境是 RTX 3060 12GB,处理一页论文 PDF 大约 3-5 秒。如果纯 CPU 跑,一页可能需要 30-60 秒。官方推荐 4GB+ 显存,有显卡的话体验会好很多。

模型权重

安装完依赖后,还需要下载模型权重。模型文件托管在 Hugging Face 和 ModelScope 上,首次使用需要下载,大概几个 GB。下载完成后,在配置文件中指定模型路径即可。

实际运行效果

我测了 5 份不同格式的 PDF 文档:

文档类型
布局检测
文字提取
公式识别
表格提取
总体评价
标准学术论文(LaTeX 排版)
★★★★★
★★★★★
★★★★★
★★★★☆
非常适合
扫描版书籍
★★★★☆
★★★★☆
-
★★★☆☆
可用
财务报告(复杂表格)
★★★★☆
★★★★★
-
★★★☆☆
表格表现一般
中文技术文档
★★★★☆
★★★★★
★★★★☆
★★★★☆
中文效果优秀
图文混排文档
★★★★☆
★★★★☆
-
★★★☆☆
图片区域识别准确

总结:对于标准排版的文档(论文、报告、技术文档),效果非常出色,可以满足日常使用需求。对于复杂排版和低质量扫描件,效果会有所下降,但整体可用性已经超过了我之前的预期。

不想折腾的替代方案:MinerU

如果你不想手动配置环境、不想调参数、就想把 PDF 变成 Markdown,可以用 MinerU

MinerU 是 PDF-Extract-Kit 的上层封装,提供一键 PDF 转 Markdown 的能力,背后用的就是 PDF-Extract-Kit 的模型。适合"我想直接用,不想折腾配置"的用户。

但缺点是自定义能力不如直接使用 PDF-Extract-Kit 灵活。如果你需要精细控制每个模块的参数,或者只想用其中的某个功能,还是直接上 PDF-Extract-Kit 更合适。

六、适用场景:谁需要这个工具?

学术研究者

写论文的时候,从参考文献中提取公式和表格数据,这是最直接的应用场景。把公式提取为 LaTeX 代码,直接用到自己的论文里,省去手动敲公式的时间。

数据分析师

从 PDF 报告中提取表格数据,导入 Excel 或 Python 做进一步分析。自动化数据采集流程,告别手动抄数据。

知识管理爱好者

把 PDF 文档转为 Markdown,导入 Obsidian、Notion 等知识库。配合 MinerU 可以实现"PDF 到 Markdown"的一键转换,构建个人知识库的文档输入管道。

内容创作者

从 PDF 中提取引用内容,保留格式和来源。将 PDF 中的图表和文字分类整理,提高创作效率。

适合谁:有 PDF 内容提取需求的技术用户、学术研究者、自动化工作流使用者。

不适合谁:不愿碰命令行的纯小白(建议用 MinerU 代替)、只需要简单文字提取的(建议用在线工具)。

七、诚实地说,它也有局限

部署门槛

需要 conda 环境 + 下载模型权重(几个 GB),对新手有一定门槛。最佳体验需要 GPU(4GB+ 显存),纯 CPU 可以跑但速度慢,不适合批量处理。

复杂文档表现一般

复杂排版(多栏、不规则图文混排)的布局检测偶尔会出错。复杂表格(多层合并单元格、跨页表格)的结构识别偶尔有误。手写体公式的识别准确率远低于印刷体。

不是端到端产品

它是一个工具箱,不是开箱即用的产品。需要一定的技术能力去配置和使用。如果不想折腾,建议用 MinerU。

许可证限制

PDF-Extract-Kit 采用 AGPL-3.0 许可证。商业使用需要谨慎——AGPL 的传染性很强,如果你的项目使用了 AGPL 代码,整个项目可能都需要开源。这部分受影响的包括 YOLO 代码和 PyMuPDF 的许可条款。

个人使用和研究完全免费,但如果你打算在商业项目中使用,务必先了解 AGPL-3.0 的具体条款。

八、写在最后

PDF-Extract-Kit 解决了一个很实际的问题——"从 PDF 里提取内容"这件事,不应该只有付费工具才能做好。

它用模块化的设计,给出了一个灵活、可组合的开源方案。虽然不是零门槛的工具,但对于有技术能力的用户来说,价值是实打实的。

我比较欣赏它的设计思路:不试图用一个模型解决所有问题,而是把 PDF 内容提取这个复杂任务拆解成多个子任务,每个子任务使用该领域最成熟的模型。这种工程化的思维方式,比用一个大模型包打天下要务实得多。

如果你手头有需要处理的 PDF 文档,不妨从官方 GitHub 下载源码,按文档配置环境,找一份你手头的 PDF 试试。尤其是经常处理论文和技术文档的用户,公式识别和表格提取能力,大概率不会让你失望。


项目信息

  • 项目名称:PDF-Extract-Kit
  • GitHub:https://github.com/opendatalab/PDF-Extract-Kit
  • 协议:AGPL-3.0
  • 技术栈:Python 3.10 + PyTorch + YOLO + PaddleOCR + UniMERNet
  • 安装命令:pip install -r requirements.txt
  • 当前 Star:10k+
  • 关联项目:MinerU(PDF 转 Markdown)、UniMERNet(公式识别)、DocLayout-YOLO(布局检测)

互动话题:你平时用什么工具从 PDF 里提取内容?有没有什么好用的方案推荐?有没有被 PDF 坑过的经历?评论区聊聊,我会把好的推荐整理出来分享给大家。

如果你对 PDF-Extract-Kit 的完整配置教程感兴趣,或者在某个场景下测试过它的效果,也欢迎在评论区告诉我。