pdf-inspector 把 OCR 做成了可选项

Firecrawl 在 8 月初把自家的 PDF 解析引擎 pdf-inspector 开源了。这个 Rust 写的小工具只做一件事:先判断一份 PDF 到底需不需要 OCR,再决定怎么处理。

pdf-inspector-cover.png

它把 PDF 分成四类:原生文本、扫描件、纯图片、混合类型。判断依据是 PDF 内部的内容流,而不是先把页面渲染出来。按 Firecrawl 的说法,他们线上数据里大约 54% 的 PDF 属于原生文本,这些文件可以直接在本地提取文字,不用走 OCR。

速度是它最显眼的数据。在官方放出的 opendataloader-bench 测试里,200 份 PDF 的整体处理耗时 0.47 秒,而 PyMuPDF4LLM 要 17 秒,MarkItDown 要 16 秒。质量得分也更高:综合 0.875,阅读顺序 0.915,表格识别 0.814。当然这是厂商自己的 benchmark,文件类型也偏向原生文本,不能直接当成所有场景的结论。

pdf-inspector-benchmark.png

输出格式是 Markdown,会尽量保留标题层级、列表、表格、代码块和链接。它还能按页返回哪些页面需要 OCR,这样混合文档可以只把扫描页交给 OCR,文本页自己处理。

安装方式很多:Rust 直接 cargo add,Node 有 npm 包,浏览器里可以跑 WASM,Python 需要通过 maturin 从源码编译(PyPI 包也在推进)。自带两个命令行工具 pdf2mddetect-pdf,尝鲜很快。

pdf-inspector-flow.png

我用它试了几份存在 NAS 上的电子发票和论文 PDF。原生文本的那部分确实在 200 毫秒内就出结果了,格式保留得比我预期好。但扫描件和老旧的图片型 PDF 它不会帮你读,只会告诉你“这页需要 OCR”。另外它目前不提取图片和图表,科研论文里图多的那些,还是得配合其他工具。

它的价值不是替代 OCR,而是把 OCR 从默认选项变成可选项。本地 AI 的 RAG 管道最怕两种浪费:一种是明明能直接读的文字非要去调云端 OCR,另一种是本地小模型被塞了一堆扫描件图片。有个 10 到 50 毫秒的分类器挡在前面,后面该走什么路线就清楚多了。

Firecrawl 之前已经把 AnyDoc 一起开源了,覆盖 Word、Excel、PPT 等 14 种格式。pdf-inspector 专注 PDF,两者拼起来,文档入门的活儿基本可以本地完成。对不想把文件往云上送的人来说,这种本地优先的路线比较对胃口。

发表评论