200ms 出结果:pdf-inspector 的 PDF 类型检测与文本提取快速上手
【免费下载链接】pdf-inspectorFast Rust library for PDF inspection, classification, and text extraction. Intelligently detects scanned vs text-based PDFs to enable smart routing decisions.项目地址: https://gitcode.com/GitHub_Trending/pdf/pdf-inspector
pdf-inspector 是一个 Rust 写的 PDF 检查库,先判断文档是文本型还是扫描型,再决定要不要走 OCR。这篇文章只解决一件事:拿到一份 PDF,怎么最快判断它能直接提取还是得上 OCR。几个数字先放这:本地处理一份文本型 PDF 不到 200ms,类型判断本身只要 10~50ms。装完包,下面的代码都能直接跑。
🧭 它是什么:先给 PDF 做体检,再决定走哪条路
说白了,pdf-inspector 回答两个问题:这份 PDF 里的字是真文本还是图片?如果是真文本,能不能按版面直接抽出来?抽完它顺手转成 Markdown,标题、列表、表格、代码块都保留结构,不是平铺的一团字。
放到场景里就是:一份 200 页的财报,判断类型只要几十毫秒;确认是文本型后,本地抽完加转换也就一两百毫秒,文件不用上传任何 OCR 服务。项目方的统计里约 54% 的 PDF 根本不需要 OCR,这个库的价值就是帮你省下这部分时间和钱。在 200 份文档的公开基准里,它综合得分 0.875,是五个参评本地引擎中最高的。
📦 一行命令装好,两行代码跑起来
前置条件
Python 3.8+ 或 Node.js 就行;Python 和 Node 都有预编译包,覆盖 Linux、macOS、Windows,不用装 Rust 工具链。
安装
三种环境各一行,按需挑:
pip install pdf-inspector # Python npm install @firecrawl/pdf-inspector # Node.js npm install @firecrawl/pdf-inspector-wasm # 浏览器 WebAssembly第一次运行
跑通最小闭环:类型判断加 Markdown 提取。
import pdf_inspector r = pdf_inspector.process_pdf("document.pdf") print(r.pdf_type) # "text_based" / "scanned" / ... print(r.markdown[:60]) # Markdown 开头预期先打印出类型,比如text_based,再打印一段 Markdown 开头。到这一步就算跑通了。
⚡ 三个最常用的能力
快速检测 PDF 类型(只判断,不提取)
不抽正文,只读页面内容流,10~50ms 出结果,还附带置信度和缺文本的页码。
d = pdf_inspector.detect_pdf("document.pdf") print(d.pdf_type, d.confidence) # "text_based" 0.95 print(d.pages_needing_ocr) # [1, 3],1 起始页码批量处理前先过这道筛子:文本型直接本地抽,扫描型才送去 OCR。
只处理指定页面
大文档只关心几页时,把页码传进去(0 起始),其余页面根本不解析。
r = pdf_inspector.process_pdf("document.pdf", pages=[0, 1, 2]) print(r.page_count, r.markdown[:60])300 页的 PDF 只想看前几页,传[0, 1, 2]就够了。
提取带坐标的文本
每段文字带 X/Y 坐标、字体名和字号,加粗、斜体也有布尔标记。
items = pdf_inspector.extract_text_with_positions("document.pdf") print(f"'{items[0].text}' at {items[0].x:.0f},{items[0].y:.0f} {items[0].font}")做版面分析、或者要把文字对回渲染出的页面图片上,用这个。
🔧 进阶:扫描件也能救
按需 OCR:干净的页不碰 OCR 运行时
碰到扫描件,别整份丢给 OCR 服务。pdf_inspector.process_pdf_with_ocr("scan.pdf")默认 auto 模式:能从 PDF 结构抽出来的页走本地,质量不过关的页才渲染出来跑本地 PP-OCRv6,每页都有来源和置信度记录。干净的文本型 PDF 连 PDFium、ONNX Runtime 都不会加载,更不会下载模型;需要外部库时的配置方法见 OCR 运行时文档。
不想写代码的话,仓库还带两个命令行工具:pdf2md把 PDF 转 Markdown,支持--json、--select-pages 1,3,5-10;detect-pdf只做检测。按区域提取文字(extract_text_in_regions)和浏览器端用法,分别看 napi/README.md 和 wasm/README.md。
📚 延伸阅读
- Python API 全量参考
- Node.js 绑定与 API
- 性能基准与对比方法
- Rust API 说明
到这里,装包、跑通、类型检测、按页提取和带坐标文本都走了一遍,扫描件那关也知道入口在哪。下一步可以拿一份自己的扫描版 PDF,把process_pdf_with_ocr跑起来,看看按页路由的实际效果。
【免费下载链接】pdf-inspectorFast Rust library for PDF inspection, classification, and text extraction. Intelligently detects scanned vs text-based PDFs to enable smart routing decisions.项目地址: https://gitcode.com/GitHub_Trending/pdf/pdf-inspector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考