
Pythonを使ってPDFからテキスト抽出するには?
そもそもそのPDFはテキスト抽出に耐えうるものか?
一口にPDFといっても様々な経歴を辿って、そのPDFファイルの姿をしています。まずはそもそもPythonでデータ抽出できるPDFなのかどうかを見極めましょう。
スキャンした画像をPDF化したファイルからテキストを抽出したい...まずはOCRソフトウェアを利用しましょう。OCRを利用したあと、そのテキストを抽出する際、Pythonを利用できると思います。
表が含まれていて、テキストというよりは表データとして抽出したい...Tabulaなど、それ専用のソフトウェアを利用した方が、後々楽ちんです。
自分が作ったファイルではないが、WordやExcelで作成したらしきファイルからデータ抽出したい...最新ヴァージョンのWordやExcelでは、それらのアプリケーションで作成したPDFファイルを、再度編集可能な状態で読み込むことができるようです。もしかして、と思ったら念の為トライしてみてください。
以上に該当しなければ、適用可能性があると思います。市販されてる書籍の該当部分を紹介します。何が触れられているかのみご紹介しますので、ご興味がでたらぜひ書籍を手にとってみてください。
「退屈なことはPythonにやらせよう――ノンプログラマーにもできる自動化処理プログラミング」
PyPDFというパッケージを利用した書き方が紹介されています。目次から該当箇所を紹介しますとこんな感じです。
・13.1.1 PDFからテキストを抽出する
・13.1.2 PDFの暗号を解く
・13.1.3 PDFを作成する
・13.1.3.1 ページをコピーする
・13.1.3.2 ページを回転する
・13.1.3.3 ページを重ね合わせる
・13.1.3.4 PDFを暗号化する
13.2 プロジェクト:多数のPDFから指定したページを結合する
13.2.1 ステップ1:すべてのPDFファイルを探す
13.2.2 ステップ2:PDFを開く
13.2.3 ステップ3:ページを追加する
13.2.4 ステップ4:結果を保存する
13.2.5 類似プログラムのアイデア
公式サイトによると、以下の機能を取り揃えています。
・テキスト抽出
・メタ情報抽出
・ページごとの分割
・ページごとの合体
・切り抜き
・複数ページのPDFを1ページに
・PDFファイルの暗号化と復号化
テキスト抽出は、PDFに含まれるテキストデータがまるごと抽出されます。
「現場で使える!Python自然言語処理入門」
Apache TikaというJavaで書かれたソフトウェアのPython APIを利用しています。
・2.1.4 PDF、Wordなどからの入手
内容はPDFファイルからの読み込みと表示確認程度となります。出力されるjsonの中で"content"の中に、PDFに含まれるテキストデータがまるごと抽出されます。
テキストデータを抽出したあとは?
抽出したテキストデータは、文書構造を持っていません。まずは不要な要素を削除する必要があるでしょう。たとえば以下のようなものがありえます。
・ページ数表記
・注釈
・ヘッダの文書タイトル
・文章途中の不要な改行
見出しテキストも、平文のテキストと区別ができません。筆者もこれからトライするところですが、見出しテキストに段落番号がついていれば、それを利用してマークダウン形式に変換することも出来るかもしれません。