【Python】PyPDF2ではなくpdfminerを使いましょう

【Python】PyPDF2ではなくpdfminerを使いましょう プログラミング

「PyPDF2」でテキスト抽出を考えているなら、その考えはやめましょう。
なぜなら、PyPDF2は日本語PDFに対応していないからです。
それにPyPDF2は、もう開発が停止しています。

本記事の内容

  • PyPDF2とは?
  • PyPDF2のインストール
  • 【サンプルコード】PyPDF2によるPDFからのテキスト抽出
  • 【結論】PyPDF2ではなくpdfminerを使いましょう

それでは、上記に沿って解説していきます。
ただし、PyPDF2のインストール作業はやらないように注意してください。

この記事では、PyPDF2が日本語PDFからのテキスト抽出には使えないことを証明しています。
それを理解して、記事を読み進めてください。

PyPDF2とは?

PyPDF2は、PDFツールキットとして構築されたPure-Pythonライブラリです。

  • 文書情報の抽出 (タイトル、著者、…)
  • 文書の分割
  • 文書の結合
  • ページの切り抜き
  • ページの集約
  • PDFファイルの暗号化と復号化

Pure-Pythonであることで、外部ライブラリに依存することはありません。
そして、どのプラットフォームも動作します。
つまり、マルチプラットフォーム対応ということです。

また、ファイルストリームではなくStringIOオブジェクト上で完全に動作します。
そのため、メモリ内でPDFを操作することができます。

PyPDF2は、日本語テキスト抽出では使えません。
しかし、それ以外の用途では使える可能性は残されていますね。

PyPDF2のインストール

最新バージョンは、1.26.0です。
公開されたのは、2016年5月19日となります。

若干、古さを感じます。
というか、もう開発は停止していると言えます。

PyPDF2がサポートしているPythonのバージョンは、以下。

  • Python 2.6・2.7
  • Python 3.2 – 3.5

Python 3.6の公開日は、2016年12月23日です。
PyPDF2の最新バージョンが公開されたときには、まだPython 3.6は未公開でした。

もしかしたら、みなさんが利用中のPythonのバージョンは3.6以上かもしれません。
普通にあり得ることです。

その意味では、PyPDF2においてはPythonのバージョンが注意すべきポイントになります。

>python -V
Python 3.7.3

私の利用している環境では、サポート対象外のバージョンとなります。
インストールできるのでしょうか?
試してみましょう。

ただ、まずはPIPの更新からです。
PIPを利用する際には、常に更新を心がけましょう。

>python -m pip install --upgrade pip
Requirement already satisfied: pip in c:\anaconda\lib\site-packages (20.3.1)
Collecting pip
  Downloading pip-20.3.3-py2.py3-none-any.whl (1.5 MB)
     |████████████████████████████████| 1.5 MB 6.8 MB/s
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.3.1
    Uninstalling pip-20.3.1:
      Successfully uninstalled pip-20.3.1
Successfully installed pip-20.3.3

つい最近20.3.1に更新されたばかりなのに、もう20.3.3にバージョンがあがりました。
こういうことが常にあり得るので、PIPの更新は欠かさないようにしましょう。

では、PyPDF2のインストールを試しましょう。
次のコマンドでインストールします。

pip install PyPDF2

実行すると、次の表示で終わりました。

Successfully built PyPDF2
Installing collected packages: PyPDF2
Successfully installed PyPDF2-1.26.0

無事にインストールが完了したようです。
サポートを公式にしていなくても、インストールできることが証明されました。

ただし、Pythonで利用できるどうかはわかりません。
実際に検証するしかありません。

【サンプルコード】PyPDF2によるPDFからのテキスト抽出

読み込むPDFを用意しましょう。
経済産業省のサイトからダウンロードしたPDFを使います。

以下は、そのPDFからテキストを抽出して表示するプログラムです。

import PyPDF2

FILE_PATH = "./data/yachin_shien.pdf"

with open(FILE_PATH, mode="rb") as f:
    reader = PyPDF2.PdfFileReader(f)
    page = reader.getPage(0)
    text = page.extractText()
    print(text)

実行すると、以下の結果となります。

はい、文字化けですね。
日本語が文字化けしています。

やはり、日本語のPDFでは文字化けしてしまうようです。

【結論】PyPDF2ではなくpdfminerを使いましょう

PDFから日本語テキストを抽出するには、pdfminerを使いましょう。
PyPDF2では、日本語を抽出できないことが証明(検証)できました。

もしかしたら、PyPDF2でもいろいろと工夫すれば、日本語にも対応できるかもしれません。
しかし、pdfminerなら工夫なんて一切必要ありません。

そもそも、pdfminerは日本人のプログラマーが開発しています。
そのため、日本語PDFを扱うには適しています。

上記記事では、pdfminerのインストールから詳しく解説しています。
今回文字化けしたPDFから、文字化けせずに日本語を抽出するサンプルコードを載せています。

タイトルとURLをコピーしました