pdf-inspector
PDF classification → layout-aware extraction → clean Markdown
役割
pdf-inspector は、PDFをまず分類し、テキストを含む文書だけをローカルで高速に抽出するRustライブラリ。OCRを一律にかけず、必要なページだけを後段へ送る入口として設計されている。
10–50ms分類
0.875総合スコア
0.915Reading Order
MITライセンス
一度読み込み、経路を分ける
PDF bytes入力
detector種類・信頼度
extractor座標・フォント
layout列・行・表
markdown構造化出力
Single document load:
load_document_from_path / load_document_from_mem で文書を一度だけ読み込み、検出と抽出で共有する。分類
TextBased / Scanned / ImageBased / Mixed を、Tj・TJ・Do演算子から判定。信頼度とOCR対象ページを返す。
レイアウト
フォント情報、X/Y座標、複数カラム、RTL文字列を扱い、自然な読み順へ並べる。
Markdown
見出し、リスト、コード、リンク、脚注、表、ページ区切りを整形する。
表検出
描画矩形方式と文字整列方式を併用し、金融表や継続表にも対応する。
文字コード
ToUnicode CMap、Type0 / Identity-H、UTF-16BE、UTF-8、Latin-1を処理する。
実行環境
純粋なRust実装。PDF解析の主要依存は lopdf で、外部サービスやMLモデルを使わない。
同じ処理を複数の境界から呼ぶ
| 経路 | 導入 | 主な呼び出し | 用途 |
|---|---|---|---|
| Rust | cargo add pdf-inspector | process_pdf | ネイティブ処理・CLI |
| Python | maturinで拡張をビルド | pdf_inspector.process_pdf | データ処理 |
| Node.js | @firecrawl/pdf-inspector | processPdf / classifyPdf | JavaScript・Bun |
| WebAssembly | @firecrawl/pdf-inspector-wasm | processPdf | ブラウザ・Web Worker |
import pdf_inspector
result = pdf_inspector.process_pdf("document.pdf")
print(result.pdf_type)
print(result.markdown)# Markdownへ変換
pdf2md document.pdf
# 検出だけをJSONで実行
detect-pdf document.pdf --json
# レイアウト分析(表・カラム)を含める
detect-pdf document.pdf --analyze --json
# ページ指定、区切り、軽量出力
pdf2md document.pdf --select-pages 1,3,5-10 --pages --compact抽出結果だけなら --raw、位置情報付き TextItem なら --items-json を使う。
必要な文書だけを高コスト経路へ
1PDF到着
2約20msで分類
3TextBased?
4Aローカル抽出
約150ms
約150ms
4B必要ページだけOCR
レポート、論文、請求書、法律文書などではOCRのレイテンシとコストを避けやすい。EarlyExit は早期判定、Full はMixed/Scannedの精度、Sample(n) は大規模文書の速度を優先する。
- GitHub: firecrawl/pdf-inspector — ソースとAPI
- crates.io — Rustパッケージ
- PyPI — Pythonパッケージ
- opendataloader-bench — ベンチマーク背景