pdf-inspector Skill:智能路由 PDF 分类提取,无需 OCR 的 Rust 利器
PDF 处理是 RAG 管道和 AI 文档解析的常见瓶颈——大部分开源方案要么慢(PyMuPDF4LLM 单次 17s),要么把扫描版 PDF 也通通送 OCR,既贵又慢。pdf-inspector 解决了这个问题:它先用 Rust 在 ~10-50ms 内判断 PDF 是文本型还是扫描型,对文本型直接本地提取并转 Markdown(200 页 corpus 仅需 0.47s),扫描版才路由到 OCR 服务。这是一个专注「智能路由」的 PDF 处理库,今日新增 1,583 stars,已进入 GitHub Trending 前列。
功能与原则
pdf-inspector 是一个 Rust 编写的 PDF 检查、分类和文本提取库,核心设计原则是「先分类再路由,避免不必要的 OCR」。整个库无 ML 模型、无外部服务依赖,单一依赖 lopdf 做 PDF 解析。
核心功能:
– 智能分类:~10-50ms 判断 PDF 类型(TextBased / Scanned / ImageBased / Mixed),返回置信度分数和逐页 OCR 路由建议
– 文本提取:带位置信息的文本提取(字体信息、X/Y 坐标),自动识别阅读顺序(含多栏和 RTL)
– Markdown 转换:标题(H1-H4)、粗体/斜体、列表、代码块、表格、URL 链接、页码过滤、断行续接
– 表格检测:双模式——PDF 绘制指令矩形检测 + 文本对齐启发式检测;支持财务报表、跨页表格
– 多语言/编码:支持 CID font、ToUnicode CMap、UTF-16BE、UTF-8、Latin-1 编码
认可度
- GitHub Star:截至 2026-08-06 约 11,200 ★(今日新增 1,583 ★,已进入 GitHub Trending)
- Fork:743
- 语言:Rust 96% + Python 1.9% + HTML 1.8%
- 维护:12 位贡献者,主力贡献者 @abimaelmartell,Firecrawl 官方支持
- 最新版本:0.2.6(2026-08-01),最后提交 Aug 6 2026(1 小时前)
Benchmark(opendataloader-bench 200 PDFs,Apple M4 Pro):
| 引擎 | Overall | 阅读顺序 | 表格 | 标题 | 速度 |
|---|---|---|---|---|---|
| pdf-inspector | 0.875 | 0.915 | 0.814 | 0.788 | 0.470s |
| liteparse | 0.873 | 0.913 | 0.693 | 0.811 | 0.750s |
| opendataloader | 0.831 | 0.902 | 0.489 | 0.739 | 2.569s |
| pymupdf4llm | 0.735 | 0.886 | 0.401 | 0.424 | 17.117s |
| markitdown | 0.589 | 0.844 | 0.273 | 0.000 | 16.165s |
链接
GitHub:https://github.com/firecrawl/pdf-inspector
原作者
Firecrawl(@firecrawl)——专注网页爬取和文档处理的基础设施公司,曾推出同名热门爬虫库 firecrawl-py,累计 star 超过 30k+。pdf-inspector 是其文档处理工具链的最新成员。
介绍
传统的 PDF 处理方案有两类问题:一是把所有 PDF 都送 OCR(贵且慢),二是文本提取后丢失结构信息(表格乱了、标题没了)。pdf-inspector 从根本上重新思考了这个流程。
它将 PDF 处理分为两个阶段:检测和提取。检测阶段通过解析 PDF xref 表和内容流,在 10-50ms 内判断页面是否包含文本或图像,无需完整加载文档。这对于 300+ 页的大 PDF 也能快速出结果。检测结果包含 pages_needing_ocr 字段,精确列出哪些页需要 OCR,支持按页路由而非全量 OCR。
提取阶段对文本型 PDF 直接提取内容,重建阅读顺序(包括多栏报纸式布局),识别标题层级(H1-H4 通过字体大小比例聚类)、表格结构、代码块(等宽字体检测)、超链接等。最终输出干净的 Markdown,可直接喂给 LLM 或 RAG 管道。
benchmark 结果显示,在 200 页 PDF corpus 上,pdf-inspector 综合得分 0.875,处理速度 0.47s,是第二名 liteparse 的 1.6 倍,是传统方案 pymupdf4llm 的 36 倍以上。
特点
- Rust 原生实现:纯 Rust,无外部服务依赖,单二进制可分发,性能极高
- 智能 OCR 路由:仅对扫描版 PDF 触发 OCR,文本型本地处理,节省 80%+ 成本和延迟
- 精准表格检测:矩形检测(PDF 绘制指令)+ 启发式对齐双模式,支持跨页财务报表
- 多语言支持:CJK(中日韩)、RTL(阿拉伯/希伯来)、Latin-1 全覆盖,CMap 完整解码
- 多平台绑定:Python(PyO3)、Node.js/Bun(napi-rs)、浏览器 WebAssembly,API 统一
- 极速 benchmark:200 页 corpus 0.47s,综合质量分 0.875,排名第一
- 无 ML 模型:纯规则+统计,无模型依赖,部署简单,结果可复现
使用方法
Python 安装:
pip install maturin && maturin develop --release
Python 基本调用:
import pdf_inspector
result = pdf_inspector.process_pdf("document.pdf")
print(result.pdf_type) # "text_based", "scanned", "image_based", "mixed"
print(result.markdown) # Markdown string or None
Node.js 安装:
npm install @firecrawl/pdf-inspector
Node.js 基本调用:
import { readFileSync } from 'fs';
import { processPdf } from '@firecrawl/pdf-inspector';
const result = processPdf(readFileSync('document.pdf'));
console.log(result.pdfType); // "TextBased", "Scanned", "ImageBased", "Mixed"
console.log(result.markdown); // Markdown string or null
CLI(PDF 转 Markdown):
cargo install pdf-inspector
pdf2md document.pdf # 输出 Markdown
pdf2md document.pdf --json # JSON 输出
detect-pdf document.pdf # 仅分类,不提取
智能路由示例(生产管道):
pdf_type, confidence = classify_pdf("document.pdf")
if pdf_type == "text_based" and confidence > 0.8:
result = extract_markdown("document.pdf") # 本地快速处理
else:
send_to_ocr_service("document.pdf") # 仅扫描版走 OCR
使用场景与人群
适用场景:
– RAG / LLM 文档管道(研究报告、财务报表、合同)
– 规模化 PDF 处理平台(日处理量 1000+ 份)
– 文档解析 AI Agent(需要提取结构化文本)
– 知识库建设(PDF → Markdown → 向量数据库)
目标用户:
– AI 应用开发者(需要可靠 PDF 解析)
– 数据工程师(RAG 数据预处理管道)
– 研究人员(批量处理论文/报告)
– 企业文档处理平台(发票、合同、表单提取)
输入与输出案例
案例 1:文本型 PDF(财务报告)
输入:一份 50 页的文本型 PDF 财务报告(含多栏布局、表格、图表)
输出:
## 第一季度财务摘要
| 指标 | 金额(万元) | 同比增速 |
|------|-------------|---------|
| 营业收入 | 12,450 | +23.5% |
| 净利润 | 3,820 | +18.2% |
Figure 1: 2026年Q1收入趋势图 ...
处理时间:约 150ms,无 OCR 调用。
案例 2:扫描版 PDF(老旧合同)
输入:一份扫描版 PDF(300 页,每页独立图像)
输出:
{
"pdf_type": "scanned",
"confidence": 0.94,
"pages_needing_ocr": [1, 2, 3, ...300],
"markdown": null
}
系统据此将全量 300 页路由到 OCR 服务(而非尝试低效的文本提取)。
评论区
登录后可评论。