简短的结论
- 在把文字提取出来这件事上,pdftomd 和 PyMuPDF4LLM 不相上下。 在参与打分的 15 份文档上,两者平均都保留了 99% 的正文。在论文和密集表格上,PyMuPDF4LLM 的阅读顺序保持得略好一些。
- pdftomd 留给你的清理工作最少。 它去掉每页重复的页眉、页脚和页码要稳定得多,也没有留下任何被行尾连字符断开的词。三者中只有它不用安装任何东西就能用,文件也不会离开你的设备。
- MarkItDown 是为多种格式设计的,PDF 不是它的强项。 处理 PDF 时它返回不带标题的纯文本,保留 PDF 里的换行和连字符,而且在我们这组文件里丢掉了论文正文的很大一部分。这次运行中它没有 PDF 用的 OCR,所以扫描件输出为空。
- 扫描件方面,pdftomd 和 PyMuPDF4LLM 都几乎完美地读出了我们那份扫描的财务报表,连表格也是,前提是 PyMuPDF 装了 OCR 引擎。
如果你写 Python,而且 AGPL 许可证适合你的项目,PyMuPDF4LLM 是一个出色的库。如果你想现在就在浏览器里拿到结果,不用上传文件,请用我们首页上的转换器。
结果
| 文档 | pdftomd | PyMuPDF4LLMPyMuPDF 2.1 + RapidOCR 3.10 | MarkItDown0.1.9 |
|---|---|---|---|
| 美国最高法院判决书12 页 | 9,940% | 10,000% | 10,000% |
| NIST 人工智能框架14 页 | 9,980% | 9,970% | 6,240% |
| 研究论文,单栏15 页 | 9,790% | 9,810% | 2,290% |
| 研究论文,双栏12 页 | 9,930% | 9,920% | 5,060% |
| 公式较多的论文15 页 | 9,160% | 9,330% | 4,550% |
| 财务报表4 页 | 10,000% | 9,820% | 10,000% |
| IRS 税表8 页 | 9,980% | 9,810% | 9,840% |
| IRS W-9 表格6 页 | 9,980% | 9,940% | 9,990% |
| 美联储经济预测表5 页 | 9,970% | 9,950% | 9,050% |
| 扫描的财务表格2 页 | 9,930% | 9,960% | 0% |
| 中文文本7 页 | 10,000% | 10,000% | 10,000% |
| 日文报告10 页 | 10,000% | 10,000% | 10,000% |
| 韩文文本7 页 | 10,000% | 10,000% | 10,000% |
| 带图片的产品简介7 页 | 9,990% | 10,000% | 10,000% |
| 课程幻灯片12 页 | 9,850% | 9,950% | 10,000% |
| 平均 | 9,900% | 9,897% | 7,801% |
那份 1969 年的打字稿扫描件没有放进表里:它唯一的参考文本是扫描仪自带的 OCR,质量太差,没法用来打分。pdftomd 和 PyMuPDF4LLM 都从中得到了可读的文本,PyMuPDF4LLM 的零散标点更少;MarkItDown 什么也没输出。
测试条件
| 转换工具 | 版本 | 运行方式 |
|---|---|---|
| pdftomd | 本站,2026-11-13 | Chromium 中使用默认设置,16 个文件一次拖入,点 全部下载 |
| PyMuPDF4LLM | PyMuPDF 2.1 加 RapidOCR 3.10 | pymupdf4llm.to_markdown(path) |
| MarkItDown | 0.1.9 | MarkItDown().convert(path).markdown |
这些文档都是公开的,挑选时尽量覆盖人们实际会转换的类型:
| 文档 | 页数 | 难点 |
|---|---|---|
| 美国最高法院判决书 | 12 | 脚注、每页重复的页眉 |
| NIST 人工智能风险管理框架 | 14 | 封面、标题、链接 |
| 论文,单栏 | 15 | 标题、参考文献、少量公式 |
| 论文,双栏 | 12 | 跨栏的阅读顺序 |
| 公式多的论文 | 15 | 密集的数学公式 |
| Apple 季度财务报表 | 4 | 带框线的财务表格 |
| IRS Publication 15-T 节选 | 8 | 长税率表、目录 |
| IRS W-9 表格 | 6 | 表单版式、小字 |
| 美联储经济预测表 | 5 | 多层表头的宽表格 |
| 阿波罗 11 号任务报告,打字稿扫描件 | 4 | 1969 年的扫描件,没有文字层 |
| Apple 财务报表,扫描件 | 2 | 没有文字层的表格 |
| 《世界人权宣言》,中文 | 7 | CJK 文字 |
| 日本银行《展望报告》节选 | 10 | 日文、图表 |
| 《世界人权宣言》,韩文 | 7 | 韩文 |
| Raspberry Pi 5 产品简介 | 7 | 图片、图片上的文字 |
| 斯坦福 CS231n 课程幻灯片 | 12 | 幻灯片、大量小图片 |
怎么打分
每份结果都和 poppler 的 pdftotext 从同一份 PDF 中提取的文本比较。
- 找到的词是参考文本中的词出现在 Markdown 里的比例。每页重复的页眉、页脚和页码会先从参考文本中去掉,这样像 pdftomd 默认那样删掉它们的转换工具不会因此扣分。中文、日文和韩文按字计算。
- 阅读顺序是参考文本与结果之间按词计算的最长公共子序列,占参考文本的比例。栏目交错或表格单元格读乱时会下降。一两个百分点的差别可视为误差。
- 断开的词统计没有接回去的行尾连字符,比如
pur- suant。 - 残留的页眉统计结果中重复出现四次及以上的行,这几乎总是没去掉的页眉或页脚。图片占位行不计入。
表格方面,我们把 Apple 财务报表的 35 行逐行和 PDF 对照:一行的标签和每个数值都各自落在自己的单元格里、顺序正确,才算对。完全正确的行数:pdftomd 30 行,PyMuPDF4LLM 28 行,MarkItDown 5 行。在同一份报表的扫描版上,pdftomd 对了 30 行中的 29 行,PyMuPDF4LLM 30 行全对。
速度
在同一台 4 核电脑上,pdftomd 在浏览器里用 21 秒转换完全部 16 份 PDF,其中包括 9 个扫描页的 OCR。PyMuPDF4LLM 同样开着 OCR,用了 64 秒;MarkItDown 不做 OCR,用了 11 秒。你的耗时会因硬件而不同,手机比笔记本慢。
这个测试说明不了什么
- 其中一款转换工具是我们做的。 我们的清理规则是对照这类文档开发的,这对我们有利。我们公开了脚本,也如实列出我们落后的项目,但做决定之前,请用你自己的 PDF 试一试。
- 自动打分会漏掉一些问题。 一列错位的表格可能一个词都不少;标题级别错了在这里也不扣分。所以 pdftomd 会把有表格的页面标出来,提醒你检查。
- Docling 和 Marker 没有参加这一轮。 两者都需要 PyTorch 和下载模型,Marker 还要另外启动一个推理服务器。它们都用版面模型,常被推荐用于复杂版面和公式。运行方法见用 Python 把 PDF 转成 Markdown。
- 在线转换工具没有放进表里。 它们的引擎会不打招呼地变,也没法固定版本,测完第二天分数就过时了。
该用哪个转换工具?
| 如果你想要 | 用 |
|---|---|
| 现在就在浏览器里拿到结果,什么都不上传 | pdftomd |
| 在流水线里用的 Python 库,而且 AGPL 适合你的项目 | PyMuPDF4LLM |
| 一个库同时处理 Word、PowerPoint、Excel、HTML 和 PDF | MarkItDown,但要知道 PDF 会变成纯文本 |
| 公式多的论文要最好的效果,并且有 GPU | Marker 或 Docling |
自己复现
下载测试工具包:里面有浏览器端的运行脚本、给这两个库用的 Python 运行脚本、打分脚本、生成上表的脚本和原始分数。PDF 来自表中列出的公开来源,确切地址和页码范围写在工具包的 README(英文)里。
PyMuPDF4LLM 由 Artifex 开发,MarkItDown 由 Microsoft 开发。pdftomd 与两者都没有关联。