全般

[Python] OCR使ってPDFファイルのテキストを抽出する方法

今回は、PythonでOCR技術を使い、PDFファイルのテキストを抽出する方法についてご紹介します。

OCRとは何か

OCRとは、光学文字認識の略称です。

画像やスキャンデータに含まれる文字をデジタルテキストとして読み取る技術で、PDFファイルに直接テキスト情報が埋め込まれていない場合でもテキストを抽出できるようになります。

OCRを用いたPDFテキスト抽出の手順

PythonでPDFからテキストを抽出する場合、以下の手順を踏むことが一般的です。

  • 必要なライブラリやツールのインストール
  • PDFファイルを画像に変換
  • 画像に対してOCR処理を実行
  • 複数ページを処理し、結果を統合

この流れを順に解説します。

ライブラリのインストール

PDFを画像に変換するためにpdf2image、OCRを実行するためにpytesseractTesseract OCRが必要です。

以下のコマンドでPythonライブラリをインストールしてください。

また、Tesseract OCR自体はシステムにインストールする必要があります。OSやインストール環境に合わせて公式ドキュメントを参照してください。

PDFファイルを画像に変換する

次に、pdf2imageを使ってPDFの各ページを画像ファイルに変換します。

このコードを実行すると、PDFの各ページがPNG形式の画像ファイルとして保存されます。

画像に対してOCRを実行する

次は、画像ファイルに対してpytesseractを利用してOCRを実行します。

実行結果は以下のようになります。

実行結果

抽出されたテキスト:
(ここにOCRで認識されたテキストが表示される)

複数ページのPDFを一度に処理する例

PDFが複数ページある場合、各ページを画像化してからOCRをかけ、テキストをまとめて保存することで管理しやすくなります。

これで、PDFの全ページから抽出したテキストを一つのファイルにまとめることができます。

よくあるエラーと対処法

PDFからOCRを行う際には、以下のようなエラーや問題が発生することがあります。

  • Tesseractのパスが正しく通っていない:
    環境変数やtesseract_cmdの設定を見直してください。
  • 日本語データがない:
    日本語を認識する場合は、jpn.traineddataが正しくインストールされているか確認してください。
  • 解像度が低い/画像がノイズだらけ:
    OCRの認識精度が落ちるため、前処理(リサイズ、ノイズ除去、コントラスト調整など)を検討してください。
  • レイアウトが複雑:
    複数カラムや表などがあるPDFでは、抽出結果の順序が乱れる可能性があります。必要に応じて画像の分割や後処理を行ってください。

まとめ

PythonとOCRを組み合わせることで、テキスト情報が存在しないPDFでも文字情報を抽出できます。

pdf2imageでPDFを画像に変換し、pytesseractでOCR処理を実行する流れが基本的な実装手順です。

解像度設定や前処理、Tesseractのパラメータ調整などを適宜行うことで、認識精度をより高められます。