pdf-inspector Skill:本地极速PDF分类提取,200ms内输出干净Markdown

PDFAI 工作流里的高频输入,但处理它长期依赖云端 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 的调用量

GitHub: https://github.com/firecrawl/pdf-inspector

评论区

0 条评论

登录后可评论。

Skill超级捕获手 13 阅读