OCR + 文档解析全家桶
10 件套,给要从扫描件、PDF、截图里抠出结构化数据的工程师。现代 doc-AI(Marker / Nougat / Surya / Zerox / MinerU)、布局感知解析器(Docling / Unstructured / OpenDataLoader)+ 老牌 OCR(Tesseract / PaddleOCR)— 按 检测→识别→表格→结构化→JSON 的顺序安排好了。
这个 pack 包含什么
这是一个真正工程师花一下午能搭起来的流水线:把杂乱的文档 — 扫描的发票、学术 PDF、截图、双语合同 — 转成干净的结构化数据。顺序很重要:上一阶段的输出就是下一阶段的输入;跳过版面检测,是 doc-AI 流水线产出垃圾的最常见原因。
所有 10 个都是 2026 年仍在活跃维护的开源工具。整套装下来不小(模型权重几个 GB),但通常每个阶段挑一个就够,剩下的跳过。把这个 pack 当菜单用,不是清单。
推荐安装顺序
- Marker — PDF 转 Markdown,端到端。从这里开始。Marker 一把搞定版面 + OCR + 表格 + 数学公式,是绝大多数学术 / 技术 / 结构化 PDF 的合理默认值。如果 Marker 的输出够好,后面就不用看了。
- Surya — 90+ 语言的文档 OCR,含版面分析、表格检测、阅读顺序、LaTeX OCR。Marker 内部就在用它。当你只需要 OCR 层而不要整套 Markdown 流水线时单独用它。
- MinerU — 从任意文档里抽 LLM-ready 数据。复杂版面(多栏论文、杂志、政府表格)比 Marker 更强。GitHub 57K+ star。接住 Marker 投降的场景。
- Zerox — 零样本 PDF OCR。把页面图片送给视觉 LLM(GPT-4o / Claude / Gemini),拿回 Markdown。按调用计费,省去本地 GPU 推理。不想自己部署模型时的最快路径。
- Nougat — Meta 出的学术文档神经网络模型,arXiv 训练。数学公式重的 PDF 它最强(公式回来是 LaTeX,不是糊掉的字形)。比 Marker 慢,但 STEM 论文上更准。
- Docling — IBM 的文档解析库。PDF / DOCX / PPTX / 图片 / HTML 都能转成结构化 Markdown 或 JSON。整个 pack 里最通用的解析器,输入格式不固定时用它。
- Unstructured — LLM 流水线的文档 ETL。统一 API 处理 25+ 种文件格式,把文本切成有类型的元素(Title / NarrativeText / Table / ListItem)。RAG 大规模入库的工业级骨架。
- OpenDataLoader PDF — 专注给下游 agent 产出干净结构化数据的 PDF 解析器。比 Marker / MinerU 轻量,对延迟敏感比对峰值精度敏感时用它。
- PaddleOCR — 100+ 语言的生产级 OCR,目前开源里中文 OCR 最强。当 Marker / Surya 在非拉丁文字或极端噪声上挣扎时,用它当 OCR 层。
- Tesseract OCR — 40 岁的老黄牛。慢,对现代字体偶尔不准,但可预测、可脚本化、能在树莓派上跑。当 GPU 不可用、精度要求一般时的兜底方案。
它们怎么协同
输入文档(PDF / 扫描件 / 图片 / DOCX)
│
├─ Marker ─────────────────► 干净 Markdown(先试这个)
│
│ Marker 输出不行:
│
├─ MinerU ─────────────────► Markdown / JSON(复杂版面)
│
│ 输入是多格式(DOCX / PPTX / HTML):
│
├─ Docling ────────────────► 结构化 Markdown
├─ Unstructured ───────────► 有类型的元素(Title / Table / NarrativeText)
│
│ 数学公式重的学术 PDF:
│
├─ Nougat ─────────────────► LaTeX + Markdown
│
│ 云端 LLM 比自架 GPU 便宜:
│
├─ Zerox ──────────────────► 视觉 LLM 走一遍出 Markdown
│
│ 底层 OCR 层(上面的工具内部会调):
│
├─ Surya / PaddleOCR / Tesseract ──► 纯文本 + bounding box
│
└─ OpenDataLoader PDF ─────► 轻量级结构化 JSON
安装套路是:Marker 当默认,MinerU 当升级接 Marker 搞不定的版面,Nougat 处理数学,Zerox 跳过 GPU 自架。OCR-only 工具(Surya / PaddleOCR / Tesseract)是底层积木 — 上层解析器在你特定文档上失手时直接调它们。
你会遇到的取舍
- Marker vs MinerU — Marker 在规整 PDF 上更快、Markdown 更干净。MinerU 处理更怪的版面(中文报纸、政府表格、扫描书)但更慢、输出更脏。在你领域里 10 份真实文档上各跑一遍再选。
- 本地模型 vs 视觉 LLM(Zerox) — 一张 4090 跑 Marker 前期硬件投入高,但月处理量过几千页之后每页成本比 Zerox 走 GPT-4o / Claude 便宜大概一个数量级。量小的话云端是对的。
- Surya vs PaddleOCR vs Tesseract — Surya 是现代默认。PaddleOCR 在中日韩阿拉伯语上赢。Tesseract 赢在「没 GPU 也能跑」— 留它当最后兜底。
- Docling vs Unstructured — Docling 输出更干净的 Markdown;Unstructured 输出更适合 RAG 切块的有类型元素。给人看选 Docling,给检索器吃选 Unstructured。
常见踩坑
- 跳过版面检测 — 双栏学术 PDF 上直接跑裸 Tesseract,两栏文字会交错混在一起。永远先过一遍版面感知的工具(Marker / Surya / MinerU),不要把整页盲喂给 OCR。
- 不核对表格输出 — 这个 pack 里每个工具在无边框表格、合并表头、旋转文本上都仍会丢格。表格出来后过一道 sanity check(行数、列数、数值列 dtype)再用。
- GPU 显存爆掉 — Marker / MinerU / Nougat 满质量下都要 8-12 GB 显存。16 GB 卡上串行跑,别并发。
- 双语文档 — 大多数工具按页自动检测语言,不按区域。一份左英右中的合同往往一种语言识别对了,另一种乱码。PaddleOCR 处理得最好;其他工具先按区域切再喂。
- 忘了去重页眉页脚 — Marker 之类会把页码、跑动页眉、脚注当正文抽出来。后处理一道,用「跨页重复出现的子串」当 key 去掉。
10 个资产打包就绪
常见问题
完全不知道从哪开始,先试哪个?
Marker。它在最广范围的 PDF 上质量最高,端到端给你干净 Markdown,不用自己拼版面 - OCR - 表格的流水线。在你领域里挑 5 份真实文档跑 Marker。输出能用就结束了。不行再升级到 MinerU 处理版面、Nougat 处理数学。
这个 pack 必须要 GPU 吗?
Marker / Surya / MinerU / Nougat — 基本上要 GPU 或一颗够强的 Apple Silicon。技术上能跑 CPU,但慢 30-100 倍,玩玩可以,干活不行。逃生通道:Zerox(卸载给视觉 LLM API)、Tesseract(设计上就纯 CPU)、PaddleOCR(有 CPU 轻量模式)。生产线建议规划一张 GPU 卡每小时处理几千页。
中日韩 / 阿拉伯语文档怎么处理?
PaddleOCR 是开源里 CJK 和阿拉伯语最强的选择 — 它本来就主要为中文做的,模型权重深度优化过。Surya 覆盖 90+ 语言,混合脚本处理也还行。Marker 和 MinerU 内部都会代理 OCR 层,MinerU 尤其在开发时就重点考虑了中文覆盖。CJK 上别用 Tesseract,除非你被钉死在 CPU 上。
OCR 和文档解析有什么区别?
OCR 是窄问题:把图像像素转成文本字符串。文档解析是更大的问题:理解文档结构 — 章节、段落、表格、图、阅读顺序、引用。Tesseract 和 PaddleOCR 只做 OCR。Marker / MinerU / Docling / Unstructured 在 OCR 之上做解析。这个 pack 两层都要的原因是:高层解析器在某一页偶尔会失败,需要可用的 OCR 层去补救。
能不能用托管 API 不自己部署?
好几个工具都有托管版或商业封装 — Marker 有托管 API,MinerU 跑成托管服务,Unstructured 有 API 计划,Zerox 设计上就只是调视觉 LLM API。量小、原型阶段用托管对。量大、合规数据、文档内容不能出网络的场景,自架是路。真正要看的基准是你真实工作负载下每千页成本,不是榜单上的精度数字。