きむおばプロフィール画像

きむおばです。関東在住の40代の主婦です。 契約社員・派遣・フリーランスの3足のわらじ中。フリーランスでは、ファイナンシャルプランナーとしてライターやセミナー講師をしたり、サイト制作やプログラムを作ったりしています。
お金・子育て・趣味のこと…何でも気ままに書く雑記ブログです。
目標は、ライター・サイト制作・広告他の収入バランスを整えること。ブログ収入UPに今年も力を入れます。

Menu
主婦の働き方・稼ぎ方・生き方 

PythonでPDFファイルからテキストデータを抽出する方法

python3 Djyango 超初心者の備忘録
記事がお役に立てたらシェアお願いします♪

1週間前から、PythonとDjangoをネット上のチュートリアルを探しながら、試行錯誤で触っている初心者です。

現在の最終目標は、「お客様から送られてくる請求書PDFファイルから、必要なデータのみ取り出して請求情報Excelファイルへレコードを自動で追加する」処理をPythonで作成すること。

まだ完成していません。いろいろなモジュールを試してみてはダメで他のモジュールを探すといったトライアンドエラーの状態なのですが、このぐちゃぐちゃした作業記録も残しておこうと思います。どこかで同じように悩む方と未来の自分のために。

PythonでPDFからテキストを読み込む方法

Pythonを使ってPDFファイルからテキストを取得する方法は、今のところ次の2つのライブラリを使って実現できる方法があることを見つけました。

  1. pdfminer
  2. tesseract

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

>>>pdfminer公式サイト Git

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操作ができるようになったり、機能を追加しやすくしてくれる。

>>>tesseractOCR公式サイト Git

python3 Djyango 超初心者の備忘録
Twitterで最新情報をお知らせ
記事がお役に立てたらシェアお願いします♪