pdf-inspector

PDF classification → layout-aware extraction → clean Markdown

1 — 概要
役割

pdf-inspector は、PDFをまず分類し、テキストを含む文書だけをローカルで高速に抽出するRustライブラリ。OCRを一律にかけず、必要なページだけを後段へ送る入口として設計されている。

10–50ms分類
0.875総合スコア
0.915Reading Order
MITライセンス
2 — 処理パイプライン
一度読み込み、経路を分ける
PDF bytes入力
detector種類・信頼度
extractor座標・フォント
layout列・行・表
markdown構造化出力
Single document load: load_document_from_path / load_document_from_mem で文書を一度だけ読み込み、検出と抽出で共有する。
3 — 機能の境界

分類

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モデルを使わない。

4 — API・導入経路
同じ処理を複数の境界から呼ぶ
経路導入主な呼び出し用途
Rustcargo add pdf-inspectorprocess_pdfネイティブ処理・CLI
Pythonmaturinで拡張をビルドpdf_inspector.process_pdfデータ処理
Node.js@firecrawl/pdf-inspectorprocessPdf / classifyPdfJavaScript・Bun
WebAssembly@firecrawl/pdf-inspector-wasmprocessPdfブラウザ・Web Worker
import pdf_inspector
result = pdf_inspector.process_pdf("document.pdf")
print(result.pdf_type)
print(result.markdown)
5 — CLIでの操作
# 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 を使う。

6 — OCRルーティング
必要な文書だけを高コスト経路へ
1PDF到着
2約20msで分類
3TextBased?
4Aローカル抽出
約150ms
4B必要ページだけOCR

レポート、論文、請求書、法律文書などではOCRのレイテンシとコストを避けやすい。EarlyExit は早期判定、Full はMixed/Scannedの精度、Sample(n) は大規模文書の速度を優先する。