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 パースを直接実行したい場合。

動作原理(概要)

  1. 高速な分類 – PDF のコンテンツストリームをサンプリングし、テキスト(Tj/TJ)と画像(Do)の演算子を検出し、信頼度スコアと OCR が必要なページのリストを返します。
  2. シングルパス解析 – ファイルは一度だけ読み込まれ、分類と抽出の両方に同じメモリ内表現が再利用され、重複 I/O を回避します。
  3. 抽出パイプライン – フォントの解析、CIDエンコーディングのデコード、PDF 演算子の走査により TextItem(フォント、サイズ、X/Y 座標付き)を生成し、行にグループ化、列検出、読み順の決定を行います。
  4. 表検出 – 2つの戦略を使用:(a) 描画コマンドからの矩形ベース検出(PDF 矩形のユニオン・ファインド)と (b) テキスト位置からのヒューリスティックな整列検出。複数ページにまたがる表や財務レイアウトに対応します。
  5. Markdown 変換 – フォントサイズ比で見出しを分析、フォント名で太字/斜体を検出、等幅フォントでコードブロック、リストマーカー、URL などを識別し、オプションでページ区切りマーカーを含むクリーンな Markdown を出力します。
  6. オプションの OCRocr 機能を有効にすると、テキストでないページのみがラスタライズされ、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 から直接取得しています。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト