pdf-inspector:智能 PDF 分类与高速文本提取的 Rust 利器
PDF 处理是 RAG 管道、文档智能化和 AI 录入系统的常见瓶颈——一份 PDF 进来,先过 OCR 还是直接提取文本?人工判断成本高,统一走 OCR 延迟又大。pdf-inspector 解决的就是这个问题:先用 Rust 编写的轻量分类器判断 PDF 类型(TextBased / Scanned / ImageBased / Mixed),再决定走快速本地提取还是 OCR,整个过程 200ms 内完成,无需调用外部服务。
pdf-inspector 来自 Firecrawl(web scraping 基础设施团队),是一个纯 Rust 编写的 PDF 检查、分类与文本提取库。核心能力有两层:一是智能分类,通过采样 PDF 内容流检测是否有文字操作符(Tj/TJ),来判断是否需要 OCR;二是结构化提取,输出带位置信息的 TextItem,自动识别多栏布局、表格、标题层级,并转成干净 Markdown。整个库无 ML 模型、无外部依赖,核心只依赖一个 lopdf。
项目当前 10.2k GitHub stars,今日(2026-08-05)新增约 2,540 stars,Trending 排名第三,fork 665 个,活跃贡献者 12 人,Firecrawl 官方维护,最近提交(2 小时前)持续迭代中。
GitHub 链接:https://github.com/firecrawl/pdf-inspector
原作者:Firecrawl(@firecrawl),专注 web scraping + 文档处理基础设施,firecrawl.dev 官方出品。
pdf-inspector 的核心设计围绕一个判断:这份 PDF 是文字版还是扫描版。分类器在 ~10–50ms 内采样内容流,检测 Tj/TJ(文字操作符)和 Do(图片操作符)来判断类型,返回置信度分数(0.0–1.0)和逐页 OCR 路由建议(pages_needing_ocr)。对 ~54% 的文字型 PDF,可以直接跳过 OCR。
提取层同样精细。位置感知提取(TextItem 包含 X/Y 坐标和字体信息)保证了阅读顺序的正确性;Markdown 转换覆盖 H1–H4 标题识别(基于正文字号的字体大小梯度)、粗体/斜体、CJK/RTL 字符处理、连字符断行合并、URL 转 Markdown 链接等。表格检测采用双模式——PDF 绘制操作符矩形检测 + 文本对齐启发式检测,能处理财务报表、跨页表格和脚注。
benchmark 数据(2026-07-31,M4 Pro,200 PDFs)显示了 pdf-inspector 的领先优势:
| 引擎 | Overall | Reading Order | Tables | Headings | 速度 |
|---|---|---|---|---|---|
| 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 |
pdf-inspector 在综合分、阅读顺序分、表格分和速度上全面领先,比主流方案快 3–36 倍。
pdf-inspector 提供四套绑定,开发者可以根据场景直接引入:
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
import { processPdf } from '@firecrawl/pdf-inspector';
const result = processPdf(readFileSync('document.pdf'));
console.log(result.pdfType); // "TextBased" | "Scanned" | "ImageBased" | "Mixed"
console.log(result.markdown);
CLI
pip install maturin maturin develop --release
cargo install pdf-inspector
pdf2md document.pdf # 输出 Markdown
detect-pdf document.pdf # 仅分类,不提取
detect-pdf document.pdf --analyze --json # 分类 + 布局分析
Browser / WASM
import init, { processPdf } from '@firecrawl/pdf-inspector-wasm';
await init();
const pdf = new Uint8Array(await fetch('/doc.pdf').then(r => r.arrayBuffer()));
const result = processPdf(pdf);
适合需要大规模文档处理的团队:RAG 管道预处理(智能路由决定 OCR vs 提取)、企业文档数字化(合同/发票/报表)、AI 录入前处理(过滤编码损坏字体问题)。任何需要先判断再处理的 PDF 自动化场景都适用,尤其适合不想维护 OCR 服务、有成本压力或延迟要求的 AI 应用。
输入示例 1:一份财报 PDF(文字版,含多栏布局和表格)
pdf_type = "text_based"
confidence = 0.98
markdown = "## 第一季度财务概览nn| 项目 | 金额 |n|------|------|n| 收入 | ¥12.5M |n..."
输入示例 2:一份扫描件 PDF
pdf_type = "scanned"
confidence = 0.91
pages_needing_ocr = [1, 2, 3]
markdown = None
→ 触发 OCR 管道
作者:Skill超级捕获手
标题:pdf-inspector:智能 PDF 分类与高速文本提取的 Rust 利器
GitHub:https://github.com/firecrawl/pdf-inspector
Star:截至 2026-08-05 约 10.2k(今日 +2,540)
文章 URL:待发布后补充
评论区
登录后可评论。