做大模型应用的都知道,RAG 的第一步就是把文档解析成结构化文本。听起来简单,做起来想砸电脑。
我因为工作需要,系统测了市面上主流的文档解析方案。今天把结论和踩坑经验分享出来,帮你少走弯路。
为什么文档解析这么难
先说个反直觉的事实:PDF 不是给人读的格式,是给打印机读的。
PDF 内部存的不是"段落"和"表格",而是一堆文本块的坐标、字体大小和绘制指令。所谓的"表格",不过是几根线条加上恰好对齐的文字。所谓的"标题",可能只是字号比正文大了 2pt。
这就意味着,任何文档解析工具都在做一件事:从像素级的排版信息里,逆向推断出文档的逻辑结构。
评测选手
我测了以下几个主流方案,覆盖开源和商用:
| 工具 | 类型 | 是否需要 GPU | 核心原理 |
|---|---|---|---|
| PyMuPDF (fitz) | 开源 | 不需要 | 直接解析 PDF 内部结构 |
| pdfplumber | 开源 | 不需要 | 基于 pdfminer,擅长表格 |
| Marker | 开源 | 推荐 | 深度学习,PDF→Markdown |
| MinerU | 开源 | 推荐 | 上海 AI Lab,版面分析+OCR |
| Docling | 开源 | 可选 | IBM 出品,文档理解模型 |
| Unstructured | 开源+商用 | 可选 | 多策略组合,生态完善 |
| LlamaParse | 商用 API | 不需要 | LlamaIndex 官方,多模态 |
| Doc2X | 商用 API | 不需要 | 国产,效果很好 |
评测维度
我从以下几个实际业务角度打分(5 分制):
1. 表格识别
这是区分度最大的维度,没有之一。
简单表格(规整的行列、有边框)大家都能处理。真正拉开差距的是:
- 合并单元格:
rowspan/colspan,很多工具直接错位 - 跨页表格:一个表格跨了两页,上下页能不能拼起来
- 无线框表格:只靠列对齐来区分,没有实际的表格线
实测结论:
- Doc2X、LlamaParse 表现最好,跨页和合并单元格基本能处理
- Marker、MinerU 中等偏上,简单合并没问题,复杂的会出错
- PyMuPDF、pdfplumber 需要自己写后处理逻辑,原始输出不够用
- Unstructured 默认策略一般,用
hi_res模式好很多但慢
2. 标题层级
大部分工具靠字体大小和加粗来猜标题层级。问题在于:
- 有些 PDF 的标题和正文字号一样,只是加粗
- 有些用颜色区分
- 自动编号(1.1, 1.1.1)的层级还原
Marker 和 Docling 在这块做得最好,输出的 Markdown 标题层级基本准确。PyMuPDF 你得自己根据字号写规则判断。
3. 页眉页脚
看似小问题,实际很烦。如果不去掉,RAG 检索时会被"第 X 页"、"公司名称"、"Confidential"这些垃圾文本严重干扰。
- MinerU 做得最好,自动识别并过滤
- Marker 也不错
- PyMuPDF / pdfplumber 需要自己写规则过滤
- LlamaParse / Doc2X 大多数情况能去掉,偶尔漏
4. 布局理解
多栏排版、文本框、浮动图片、混排布局——这些是版面分析的硬骨头。
- 基于深度学习的方案(Marker、MinerU、Docling)明显更强
- 传统解析方案(PyMuPDF、pdfplumber)在复杂排版下经常把阅读顺序搞乱
5. 中文支持
这是很多国外工具的软肋。
- MinerU:国产,中文支持最好
- Doc2X:国产,中文没问题
- Marker:还行,但偶尔有分词错误
- LlamaParse:英文为主,中文偶尔出问题
- Docling:中文支持一般
6. 速度和成本
| 工具 | 50 页 PDF 耗时 | 硬件要求 | 费用 |
|---|---|---|---|
| PyMuPDF | ~2 秒 | CPU | 免费 |
| pdfplumber | ~5 秒 | CPU | 免费 |
| Marker | ~30 秒 | GPU(推荐) | 免费 |
| MinerU | ~45 秒 | GPU(推荐) | 免费 |
| Docling | ~40 秒 | GPU(可选) | 免费 |
| Unstructured hi_res | ~60 秒 | GPU | 免费/商用 |
| LlamaParse | ~20 秒 | 云端 | $0.3/千页起 |
| Doc2X | ~15 秒 | 云端 | 按页计费 |
我的推荐
场景一:要求高 + 有预算
→ Doc2X 或 LlamaParse
商用方案就是好,尤其是复杂表格和混合排版。如果文档以中文为主,优先 Doc2X。
场景二:想本地免费跑
→ MinerU(中文为主)或 Marker(英文为主)
开源方案里质量最好的两个。有 GPU 跑起来效果不输商用。MinerU 对中文学术论文、研报之类的效果特别好。
场景三:只是简单提取文字
→ PyMuPDF
快得飞起,几秒搞定。如果你的文档排版简单,用它就够了。搭配正则提取特定内容,效率最高。
场景四:在搭 RAG 管道
→ Unstructured
和 LangChain、LlamaIndex 集成好,生态最完善。默认策略一般,但 hi_res 模式 + 后处理可以达到不错的效果。
踩坑总结
-
别信 demo:很多工具的 demo 用的是精心挑选的文档,换你自己的文档可能效果差很远。一定要用自己的真实数据测。
-
扫描件是另一个世界:原生 PDF 和扫描件完全是两回事。扫描件需要先 OCR,然后再做版面分析。不要拿扫描件的效果去评价一个原生 PDF 解析工具。
-
表格是永远的痛:说实话,没有任何方案能 100% 还原复杂表格。如果你的业务核心是表格数据,建议多方案对比 + 人工抽检。
-
后处理很重要:任何工具的原始输出都需要后处理。去重复段落、合并跨页内容、清理特殊字符……这些"脏活"往往决定了最终效果。
-
别追求一个工具解决所有问题:实际项目中,组合使用效果更好。比如用 PyMuPDF 做快速预处理,遇到复杂页面再调 Marker/MinerU。
最后
文档解析看着不起眼,但它是整个 RAG 管道的地基。地基不稳,后面做得再花哨也没用。
希望这篇评测能帮你选到合适的工具。如果你在搭建 RAG 系统遇到了文档解析的问题,欢迎评论区交流。
本文基于实际项目经验,评测数据来自真实中英文文档测试。工具版本截至 2026 年 2 月。