建 RAG 之前先把 PDF 转对照:Docling、Marker、MinerU 和一个能打分的对比脚本
一张季度收入表被转成了一串按顺序排下来的数字,检索一直用错误的数字作答。嵌入模型没问题,是 PDF 转文本这一步在检索看到内容之前就把结构删了。
💡 你将学到
一张季度收入表被转成了一串按顺序排下来的数字,检索一直用错误的数字作答。嵌入模型没问题,是 PDF 转文本这一步在检索看到内容之前就把结构删了。
检索系统答错了,问题常常不在检索逻辑。一张季度分部收入的表,在转换时变成了一串按阅读顺序排下来的数字,表头的含义彻底丢了,再强的重排模型也救不回来。PDF 转文本这一步,在嵌入模型看到内容之前就已经决定了答案。
这一步也是团队投入最少的一步,通常是跟着教程随手装第一个出现的库。目前真正值得考虑的开源转换器有三个,它们栽跟头的地方并不相同。本文给一个用自己文件打分的小工具,替代道听途说的排行榜,以及数字不一致时该看哪里。
什么叫「转得好」
「提取了多少字符」是个没用的指标——把双栏顺序打乱的工具也能提取出很多字符。真正要紧的是四项:阅读顺序(多栏论文和侧栏)、表格结构(带表头的 markdown 表保留语义,压平的数字没有)、标题层级(决定切块能不能按章节边界走)、图和公式的处理方式。任何打分工具都该围绕这四项加耗时,后文的脚本就是干这个的,故意写得很糙。
三个转换器和可查的版本
截至 2026-10-23:Docling 是 PyPI 2.142.0,MIT,约 6.9 万星,Python 3.10 起;Marker 的包名是 marker-pdf,2.0.0,Apache-2.0,约 4.1 万星;MinerU 是 4.0.12,Apache-2.0 加附加条款,约 8.2 万星,Python 要求低于 3.15。
两处要提前看:MinerU 的 LICENSE 开头就写明「Apache-2.0 并受以下附加条款约束」,GitHub 上的徽章显示 NOASSERTION,别只看徽章;Marker 的可选 LLM 增强会把页面内容发给模型服务商,默认是托管模型,这是数据流向问题而不是质量开关。
先做基线,再谈转换
基线就是 PDF 自带的文本层,用 pdftotext -layout 朴素抽出来。它没有阅读顺序、没有表格,正因如此适合做召回检查:一个工具漏掉 15% 的词,不是「稍微差一点」,是在删内容。而召回率超过 100% 通常意味着页眉页脚或表格单元格被重复输出——看着无害,对切块是灾难,同一句话落进两个块,相似度被它主导。
三工具分别跑,再用一个脚本打分
Docling 的 CLI 直接吃文件(docling report.pdf --output 目录);Marker 用 marker_single report.pdf --output_format markdown --output_dir 目录;MinerU 用 mineru parse report.pdf --pages 1-40,注意它默认只解析前十页,不写全范围会让一个四十页的报告看起来又快又少。打分脚本只做四件事:和基线比对词频算召回、数 markdown 标题、数带分隔线的表格行、报告字符数,每份输出一行。
读数字要防着它骗人:召回接近满值但表格行数为零,就是「文字都在、结构全丢」,这是最常见也最伤检索的结果,因为词能搜到、关系没了;标题多不一定好,把每行短句都提成标题的工具会给你一份满是页码的目录;带竖线但没有 |---|---| 分隔行的不算表。这些指标替代不了亲手读五页,但能替代对着五十份文件瞎猜。
扫描件是另一回事
原生 PDF 已有文本层,开 OCR 是浪费算力甚至污染干净文本;扫描件没有文本层,不 OCR 的工具会返回一个空文件,而这次运行看起来是成功的。Docling 把选择权交出来:--ocr 开关,加 --ocr-engine、--ocr-lang、--ocr-mode 控制细节,默认管线按数字文档处理。判断办法很简单:在阅读器里能不能框选文字。真实语料常常一半原生一半拍照,只按一种调好的管线会在另一种上静默产出空文件。
LLM 增强:质量换数据流向
Marker 的 --use_llm 能把跨页表格、行内公式、表单字段交给语言模型处理,代价是页面内容离开本机(默认托管模型,也可指向 Gemini、Claude、OpenAI 兼容端点、Azure、Vertex、OpenRouter 或本地 Ollama)。客户材料指本地 Ollama 会掉质量但不外流,公开论文用托管默认更省事。Docling 的对应做法是 --pipeline vlm --vlm-model 走本地视觉模型。这是合规决策附带质量后果,不是反过来。
没人提的运维重量
三个都是 PyTorch 管线:装一个就是几个 G 的环境,首次运行还要下载布局、OCR、表格模型才能出第一页。所以要预留磁盘和装机时间,把环境烤进镜像而不是每个任务重装;离网部署要连模型缓存一起拷;版本要钉死,转换器在小版本之间改输出,重索引时切块边界悄悄变了,几个月后会表现为「检索变差」。
按文档类型选
原生报告和论文、表格要紧,从 Docling 起;布局混杂、有公式、输出直接喂给 LLM,从 Marker 起;扫描档和学术语料量大,从 MinerU 起,它的 CLI 直接出结构化 JSON。最稳的做法是拿自己十份文件三个都跑一遍——真实语料上的差距几乎总比公开榜单上的差距大。
最后一句实操建议:这一步是整个 RAG 流程里最便宜就能测、也最贵才发现的环节。哪天检索答错,你能在几分钟内分出是转换器丢了表,还是检索漏了段,这个判断力比选哪个工具更值钱。
站内相关
本站文章由编辑人工撰写,收录的工具均经过实测或公开资料核验。文中链接指向工具官网或 GitHub 仓库,仅作信息参考,不构成付费推广。
