pdf-inspector Skill:本地极速PDF分类提取,200ms内输出干净Markdown
PDF 是 AI 工作流里的高频输入,但处理它长期依赖云端 OCR 服务——成本高、延迟大。pdf-inspector 用纯 Rust 在本地解决了这个问题:先判断 PDF 是文本型还是扫描型,再决定走快速提取还是 OCR 路由,整体耗时从云端 OCR 的 2–10 秒压缩到本地 200ms 以内,且无需任何外部模型或服务。GitHub 今日新增 2,540 stars,Trending 排名第三,是当前 AI 数据处理赛道里增速最快的 Rust 库之一。
功能与原则
核心能力: PDF 智能分类 + 位置感知文本提取 + 干净 Markdown 输出,全程无需 OCR。
设计原则:
– 本地优先:纯 Rust 实现,无外部依赖,单台机器即可运行
– 按需路由:先用 ~20ms 判断类型,避免对文本型 PDF 白嫖 OCR 费用
– 一次解析:文档只 load 一次,检测和提取共享结果,避免冗余 I/O
– 跨平台:Python / Node.js / 浏览器 WASM 三端统一 API
认可度
- GitHub Star:约 10.4k(截至 2026-08-05)
- 今日新增:约 2,540 stars,GitHub Trending 排名第三(所有语言)
- fork:677
- 贡献者:12 人(含 @claude、@cursoragent 等 AI 代理账号)
- Firecrawl 官方出品(firecrawl.dev),已在生产环境使用
- 评测基准(opendataloader-bench 200 PDF 语料):
- 综合得分 0.875(参与评测的本地引擎中最高)
- 阅读顺序得分 0.915,表格检测 0.814
- 200 篇 PDF 全程处理中位耗时 0.470 秒(pymupdf4llm 需要 17 秒)
链接
GitHub:https://github.com/firecrawl/pdf-inspector
原作者
Firecrawl(@firecrawl)— 专注网页内容提取与 AI 数据管道的开源团队,旗下还有 firecrawl(网页爬取)等多种工具,已在 AI 数据处理生态中建立影响力。
介绍
pdf-inspector 是一个用 Rust 编写的 PDF 检查、分类与文本提取库。它的核心思路是「先判断再动手」:通过采样 PDF 内容流(xref 表、页面树),在 ~10–50ms 内判断 PDF 是 TextBased / Scanned / ImageBased / Mixed 四种类型,同时给出每页是否需要 OCR 的详细路由建议。
检测完成后,如果 PDF 是文本型,extractor 会提取带位置信息的文本(X/Y 坐标、字体信息),并将其转换为结构化 Markdown——包括 H1–H4 标题(按字体大小分层)、有序/无序列表、代码块(等宽字体检测)、表格(PDF 绘图指令矩形检测 + 文本对齐启发式双重模式)、粗体/斜体、URL 链接等。
如果检测出是扫描型或混合型,库会明确标注 pages_needing_ocr,让上层决定是否接入 OCR 服务,实现精确到页的路由。
支持 Python(PyO3)、Node.js(napi-rs)和浏览器 WASM 三种调用方式。
特点
- 智能 PDF 类型检测:10–50ms 内判断 TextBased/Scanned/ImageBased/Mixed,给出置信度和逐页 OCR 路由建议
- 位置感知文本提取:保留 X/Y 坐标,支持多栏自动检测(包括报纸式分栏)和 RTL 文本
- 高质量 Markdown 转换:标题层级、表格(含财务表)、列表、代码块、粗斜体、URL 等全自动识别
- 极速性能:200 篇 PDF 全流程中位耗时 0.47 秒;同类 pymupdf4llm 需 17 秒
- 三重平台支持:Python / Node.js / 浏览器 WASM,API 统一,可本地离线运行
- 零外部依赖:纯 Rust + lopdf,无 ML 模型,不依赖云服务
- 表格双模检测:矩形检测(来自 PDF 绘图指令)+ 启发式对齐双管齐下,金融表、跨页表格均可处理
使用方法
Python 安装与调用
pip install maturin && maturin develop --release
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
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
浏览器 WASM
npm install @firecrawl/pdf-inspector-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);
console.log(result.markdown);
CLI 工具
cargo install pdf-inspector
pdf2md document.pdf # 输出 Markdown
detect-pdf document.pdf # 仅分类
pdf2md document.pdf --json # JSON 输出
pdf2md document.pdf --compact # 紧凑输出(压缩长虚线等噪音)
使用场景与人群
适用场景:
– AI 数据管道:批量处理研究报告、财务报表、合同、发票 PDF
– RAG(检索增强生成):将 PDF 转为干净 Markdown 供 LLM 训练/推理
– 本地离线文档处理:无网络或数据合规要求下的 PDF 批量提取
– 智能路由:判断 PDF 类型后决定是否调用 OCR 服务,节省成本
目标用户:
– AI 应用开发者(RAG pipeline、数据预处理)
– 数据工程师(批量文档 ETL)
– 研究人员(论文、报告快速结构化)
– 合规/隐私敏感场景(数据不能上云的团队)
输入与输出案例
案例 1:财务年报 PDF → Markdown
输入:一份 50 页的上市公司年报(文本型,含多栏布局和表格)
result = pdf_inspector.process_pdf("annual_report_2025.pdf")
print(result.markdown[:500])
输出:
## 2025 年度财务报告
### 合并资产负债表
| 项目 | 2025年末 | 2024年末 | 变动比例 |
|------|---------|---------|---------|
| 货币资金 | 12,450 | 9,820 | +26.8% |
| 应收账款 | 8,330 | 7,150 | +16.5% |
### 经营分析
公司全年实现营业收入 **4,521 亿元**,同比增长 15.3%...
案例 2:判断类型 + 智能路由
result = pdf_inspector.process_pdf("mixed_doc.pdf")
# result.pdf_type: "mixed"
# result.pages_needing_ocr: [3, 7, 12] # 仅这三页是扫描页
# 其他页直接提取,为 OCR 服务节省 3/4 的调用量
评论区
登录后可评论。