PDFファイルから文字抽出する方法として、「pypdf」「pdfminer.six」があります。
そこで、ここでは「pypdf」「pdfminer.six」の使用方法について解説しています。
この記事の対象
英文抽出 ⇒ pypdf
英文を抽出するなら「pypdf」で可能です。外部ライブラリのためpipでインストールしておく必要があります。以下を実行して下さい。
$ pip install pypdf
pypdf使用例
文字抽出
from pypdf import PdfReader
reader = PdfReader("arxiv_test.pdf")
for i in reader.pages:
page = i
print(page.extract_text())
上記のプログラムは任意のPDFファイルのすべてのページを読込んで出力しています。使用したPDFはarXivになります。使用したPDFはこちらです。
結果
指定ページだけ抽出
from pypdf import PdfReader
reader = PdfReader("arxiv_test.pdf")
page = reader.pages[0]
print(page.extract_text())
上記のプログラムは任意のPDFファイルの1ページ目を読込んで出力しています。ページを指定する場合は「.pages[]」を使用することで可能です。
結果は省略します。
画像抽出
from pypdf import PdfReader
reader = PdfReader("nikon.pdf")
page = reader.pages
page_num = len(page)
count = 0
for i in range(page_num):
page = reader.pages[i]
for image_file_object in page.images:
with open(str(count) + image_file_object.name, "wb") as fp:
fp.write(image_file_object.data)
count += 1
上記のプログラムは任意のPDFファイルの全てのページの画像を抽出する内容となっています。使用しているPDFファイルはNikonのIR資料になります。使用したPDFはこちらです。
結果
日本語抽出 ⇒ pdfminer.six
「pdfminer.six」は日本語の抽出ができるライブラリになります。こちらも外部ライブラリのため、以下の様にインストールしておく必要があります。
$ pip install pdfminer.six
pdfminer.six使用例
文字抽出
from pdfminer.high_level import extract_text
text = extract_text("nikon.pdf")
print(text)
上記のプログラムは任意の日本語が含まれているPDFファイルを読み込んで出力しています。
使用しているPDFファイルはNikonのIR資料になります。使用したPDFはこちらです。
結果
指定ページだけ抽出
from pdfminer.high_level import extract_text
text = extract_text(pdf_file="nikon.pdf",page_numbers=[1])
print(text)
指定ページだけを抽出した場合は引数に「page_numbers」を指定するだけです。
結果は省略します。
画像抽出
PDF内の画像を抽出することも可能のようで、コマンドラインから以下を実行するだけです。
C:\hoge\hoge\python.exe C:\hoge\hoge\pdf2txt.py C:\hoge\hoge\test.pdf --output-dir C:\hoge\hoge
「pythonのPath」「pdf2txt.pyのPath」「対象のPDFのPath」「–output-dir」「保存先のPath」をコマンドラインで実行するだけです。それぞれ半角スペースで区切ります。
結果としては、上手く抽出できない場合が多い印象です。
結果
以下はarXivのPDFを「src」というFolderに入れて保存先を「99-Test」というFolderにして実行した結果になります。参考までに使用したPDFはこちらです。