python3 で利用可能な pdf からテキストを抽出するライブラリについて
今回確認したライブラリについて
以下ライブラリについて、pdf からテキスト抽出を行う際に利用することを想定して調べました。
- PyPDF2
- pdfminer.six
- Apache Tika
- PDFMiner
環境
- macOS: 11.2.3
- python: 3.9.4
requirements.txt
検証に利用したライブラリを freeze したファイルの中身です。
cffi==1.14.6
chardet==4.0.0
cryptography==3.4.8
pdfminer==20191125
pdfminer.six==20201018
pycparser==2.20
pycryptodome==3.10.1
PyPDF2==1.26.0
sortedcontainers==2.4.0
結論
pdfminer.six を利用するのが良い。
PyPDF2 は日本語に対応していない。
Apache Tika は java7+ が必要。
PDFMiner は非推奨で pdfminer.six の利用が案内されている。
PyPDF2
pip install PyPDF2
以下のように利用できる。
この例はテキストを抽出するサンプル。
import PyPDF2
FILE_PATH = './pdf/090564_hanrei.pdf'
if __name__ == '__main__':
with open(FILE_PATH, mode='rb') as f:
reader = PyPDF2.PdfFileReader(f)
page = reader.getPage(1)
print(page.extractText())
ドキュメントのリンク
この抽出だとテキストが文字化けしてしまった。
日本語には対応していない。
pdfminer.six
python2 用のライブラリらしい。
しかし、python3 でも利用できた。
pip install pdfminer.six
from pdfminer.high_level import extract_text
FILE_PATH = './pdf/090564_hanrei.pdf'
if __name__ == '__main__':
text = extract_text(FILE_PATH)
print(text)
実装も簡単で、読み込みも問題はなさそう。
ドキュメントのリンク
github
Apache Tika
Java をダウンロードしないとならない。
ダウンロードページ
python で利用できるライブラリを他の人が作っている。
このライブラリの起動については java7+ が必要とのこと。
別言語を利用しなければならないため、検討することをやめます。
PDFMiner
pip install pdfminer
ドキュメントのページ
Warning: As of 2020, PDFMiner is not actively maintained. The code still works, but this project is largely dormant. For the active project, check out its fork pdfminer.six.
google翻訳結果
2020年の時点で、PDFMinerは積極的に保守されていません。コードは引き続き機能しますが、このプロジェクトはほとんど休止しています。アクティブなプロジェクトについては、フォークpdfminer.sixを確認してください。
とのこと。
このライブラリは利用せずに pdfminer.six を利用するのが正解
Discussion