PythonでPDF帳票から情報を抽出する方法|実測ログ付き9ステップ実践ガイド
請求書を開き、金額や日付を探してExcelへ転記する。1件なら数分でも、毎月100件あれば無視できない作業量です。 Pythonを使えば、PDFの受信、文字抽出、検算、CSV保存まで自動化できます。ただし、数行の抽出コードだけでは安全な無人運転になりません。 実際にHiroの環境で確認したところ、テキストを含む小規模PDFは3件すべてから文字列を取得できました。一方、記事生成の自動化基盤では、レビューと最終確認がそれぞれ240秒でタイムアウトしています。それでも処理を段階分けしていたため、記事保存、Notion保存、GitHubへのpushまでは完了しました。 この違いから分かるのは、PDF抽出で重要なのは「文字を読めること」だけではないという点です。失敗を検知し、危険な結果を止め、途中から再実行できる設計まで必要です。 この記事では、Python初心者でも着手できるように、PDF帳票から必要情報を抽出する仕組みを9ステップで解説します。 PythonによるPDF情報抽出の全体像 PDF抽出は、次の工程に分けると安全に運用できます。 PDF受信 ↓ 重複判定 ↓ ページごとの種類判定 ├─ テキストPDF → 文字を直接抽出 └─ 画像PDF → OCR ↓ 必要項目を抽出・正規化 ↓ 業務ルールで検算 ├─ 正常 → CSV・DB・会計システムへ保存 └─ 異常 → 隔離して通知 工程を分ける理由は、失敗箇所を特定しやすくするためです。 取引先が帳票レイアウトを変更しても、受信処理や保存処理まで作り直す必要はありません。該当する抽出ルールだけを修正できます。 最初に知っておきたいPDFの3分類 PDFは見た目が同じでも、内部構造が異なります。 PDFの種類 具体例 主な抽出手段 注意点 テキストPDF 会計ソフトから出力した請求書 pdfplumber、PyMuPDF 見た目と文字の読み順が異なる場合がある 画像PDF 紙をスキャンした領収書 OCR、pytesseract 傾き、低解像度、印影で誤読しやすい 混在PDF 表紙は画像、明細はテキスト ページ別判定 ファイル全体の一律判定では取りこぼす PDFファイル単位ではなく、ページ単位で文字が含まれているか確認するのがポイントです。 たとえば、10ページのうち1ページだけがスキャン画像なら、そのページだけOCRへ回します。全ページにOCRをかけるより高速で、誤認識も抑えられます。 Hiro環境で確認したPDF抽出の最小検証 Hiroのローカル環境では、2026年7月12日に次のスモークテストを実施しています。 test=hiro_pdf_extract_smoke_test date=2026-07-12 timezone=Asia/Tokyo python=3.11.9 library=pdfplumber samples=3 elapsed_ms=8.6 text_extracted=3/3 取得した文字列は次の3件です。 ...