PythonでPDFファイルからテキストデータを抽出する方法
このブログではアフィリエイト・アドセンス広告を利用しています
当ブログでは、アドセンス・アフィリエイト広告を掲載しています。
消費者庁が発表しているルールに沿って記事を作成していますが、問題のある表現を見つけた際にはご連絡ください。
1週間前から、PythonとDjangoをネット上のチュートリアルを探しながら、試行錯誤で触っている初心者です。
現在の最終目標は、「お客様から送られてくる請求書PDFファイルから、必要なデータのみ取り出して請求情報Excelファイルへレコードを自動で追加する」処理をPythonで作成すること。
まだ完成していません。いろいろなモジュールを試してみてはダメで他のモジュールを探すといったトライアンドエラーの状態なのですが、このぐちゃぐちゃした作業記録も残しておこうと思います。どこかで同じように悩む方と未来の自分のために。
目次(読みたいところへジャンプ!)
PythonでPDFからテキストを読み込む方法
Pythonを使ってPDFファイルからテキストを取得する方法は、今のところ次の2つのライブラリを使って実現できる方法があることを見つけました。
pdfminer
PythonでPDFファイルを簡単に操作できるライブラリ。
ただし、画像ファイル形式のPDFには対応していない。
そのため、ExcelやWordなどOffice製品を使って作成されたPDFファイルなら読み込み可能だが、印刷したファイルをスキャナーで取り込んで保存されたPDFファイルからテキストを読み込むことはできない。
pdfminerで対応できる事例
Excelで請求書を作成しているお客様が、ExcelからそのままPDFにファイル変換し、請求書を送付してくれている場合ならpdfminerで操作可能。
pdfminerで対応できない事例
Excelで請求書ファイルを作成し、印鑑を押してからスキャナーで取り込みPDF化した場合は対応不可能。
pdfminerの使い方
- pdfminerライブラリーをインストール
- 必要なモジュールをimportで読み込み
$ pip install pdfminer.six
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfpage import PDFPage
tesseract
HPが開発し、その後Googleにより公開されたオープンソースのOCRエンジン。
画像データから高い識字率でテキスト抽出が可能。
tesseractで対応できる事例
スキャナーでスキャンされてPDFファイル化された請求書ファイルからテキストデータを取り込む。
ただし、PDFファイルからそのままテキスト抽出できないかもしれない。(現在調査中)
tesseractの使い方
- tesseractのインストール
- 日本語辞書の追加
- pyocrをインストール
$ brew install tesseract
最初にHomebrewを使ってtesseract(テッセラクト)エンジンをPCにインストールします。
次に、日本語の辞書をダウンロードし、「usr/local/share/tessdata/(インストール方法によって異なる場合があるかも)」の下に移動して日本語辞書を追加します。
$ pip install pyocr
Pythonでtesseractを使いやすいようにpyocrをインストールします。
pyocrとはPython用のOCRツールラッパー。
ラッパーとは、元々のクラスや関数を使いやすいように包み込んでくれるツールのようなもの。今回は、pyocrラッパーを通じてtesseractエンジンを使うことで、より簡単にOCR操作ができるようになったり、機能を追加しやすくしてくれる。