firecrawl/pdf-inspector
Fast Rust library for PDF inspection, classification, and text extraction. Intelligently detects scanned vs text-based PDFs to enable smart routing decisions.
何ができるか
pdf‑inspector は高速な Rust ベースのライブラリで、PDF を分析し、ドキュメントの種類(テキストベース、スキャン画像、混合など)を判断した後、構造化された形でテキストを抽出します。PDF をクリーンな Markdown に変換でき、見出し、リスト、コードブロック、表、さらには各テキストの正確な X/Y 位置を保持します。テキストではなく画像を含む PDF については、オプションで軽量な OCR モデル(PP‑OCRv6 Small)を必要とするページにのみ適用し、全ドキュメントの OCR 処理を回避できます。
なぜ重要なのか
あなたが扱う大多数の PDF は既にテキストベースですが、多くのパイプラインではすべてのファイルを高コストな OCR サービスに通しています。pdf‑inspector は PDF の分類を 10–50 ms、大多数のファイルでテキスト抽出を 200 ms 未満で実行でき、計算コストとレイテンシを大幅に削減します。位置情報を保持した抽出により、検索可能なインデックスの構築、LLM への入力、構造化データへの変換といった後続タスクの信頼性が向上します。
誰が使うべきか
- ドキュメント処理パイプラインを構築する開発者(例:ウェブクローラー、企業向けインジェストサービス)で、OCR 必要性を判断する安価な最初のステップが必要な場合。
- LLM 向けアプリケーションで PDF をインプットし、外部 OCR API の費用を払わずにクリーンな Markdown や構造化テキストを得たい場合。
- データサイエンスチームで、研究論文、財務報告書、請求書、法的契約書から表、見出し、コードスニペットを抽出したい場合。
- フロントエンドエンジニアで、WebAssembly を通じてブラウザ上で PDF パースを直接実行したい場合。
動作原理(概要)
- 高速な分類 – PDF のコンテンツストリームをサンプリングし、テキスト(
Tj/TJ)と画像(Do)の演算子を検出し、信頼度スコアと OCR が必要なページのリストを返します。 - シングルパス解析 – ファイルは一度だけ読み込まれ、分類と抽出の両方に同じメモリ内表現が再利用され、重複 I/O を回避します。
- 抽出パイプライン – フォントの解析、CIDエンコーディングのデコード、PDF 演算子の走査により
TextItem(フォント、サイズ、X/Y 座標付き)を生成し、行にグループ化、列検出、読み順の決定を行います。 - 表検出 – 2つの戦略を使用:(a) 描画コマンドからの矩形ベース検出(PDF 矩形のユニオン・ファインド)と (b) テキスト位置からのヒューリスティックな整列検出。複数ページにまたがる表や財務レイアウトに対応します。
- Markdown 変換 – フォントサイズ比で見出しを分析、フォント名で太字/斜体を検出、等幅フォントでコードブロック、リストマーカー、URL などを識別し、オプションでページ区切りマーカーを含むクリーンな Markdown を出力します。
- オプションの OCR –
ocr機能を有効にすると、テキストでないページのみがラスタライズされ、PP‑OCRv6 Small モデルに供給され、他の高速 Rust パイプラインは変更されません。
使い始め(簡単なステップ)
- Rust:
cargo add pdf-inspectorで追加後、process_pdf("file.pdf")を呼び出します。 - Python: maturin ビルドツールをインストールし、
maturin develop --releaseを実行後、import pdf_inspector; pdf_inspector.process_pdf("file.pdf")とします。 - Node.js:
npm install @firecrawl/pdf-inspectorでインストールし、processPdfを使用します。 - ブラウザ: WASM パッケージ
@firecrawl/pdf-inspector-wasmをインストールし、init()を呼び出し、PDF のUint8Arrayに対してprocessPdfを実行します。 - CLI:
cargo install pdf-inspectorでインストール後、pdf2md file.pdf(分類のみならdetect-pdf)を実行します。
制限事項と未解決の課題
- OCR はオプションで、追加のネイティブ依存(PDFium、ONNX Runtime、PP‑OCR モデル)が必要です。
ocr機能を有効にしないと、純画像 PDF からのテキスト抽出はできません。 - 複雑なレイアウト(例:深くネストされた表、特殊なカラム構造)は依然として手動の後処理が必要です。ヒューリスティックな表検出は、大多数の財務・レポート系表には適していますが、完全なレイアウトエンジンではありません。
- 言語対応 – コア抽出は言語に依存しませんが、OCR の品質は PP‑OCR モデルに依存し、主にラテン文字に最適化されており、CJK や手書きテキストでは精度が低下する可能性があります。
- 巨大 PDF でのパフォーマンス – 分類は
ScanStrategyオプション(フルスキャン vs. サンプリング)で調整可能で、非常に大きなドキュメントでは速度と精度のバランスを取れます。
すべての詳細はリポジトリの README から直接取得しています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト