「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から、文字化けせずに日本語を抽出するサンプルコードを載せています。