こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
PythonでPDFファイルのテキスト情報を抽出する手順
Pythonでは「PyPDF2」という英語版PDF文書を操作できるモジュールがあり、それを用いてPDFからテキスト情報を抽出できます。(このモジュールを用いたテキスト認識は、日本語板PDFに活用すると文字化けするため、英語版PDFのみ対応です)
実際の手順ではまず、PyPDF2を用いてオブジェクトを生成し、PDFにパスワードがかかっている場合は解除した後、ページ番号を指定して順に文書情報抽出するという流れになります。
PyPDF2モジュール
PDFを扱うPyPDF2モジュールは事前にインストールが必要です。コマンドラインから下記を実行し、インストールしておきましょう。
pip install PyPDF2
【参考】PDFタスク自動化の学習におすすめの教材
Pythonを活用してPDFタスクの自動化手法を深く学びたい方向けに、おすすめの教材も併せてご紹介します。
Pythonを用いたPDFのテキスト情報取得実践
それでは実際にPythonを活用してプログラムを記述していきましょう!
PDFファイル読込・オブジェクト生成
テキスト情報を抽出したいPDFファイルをopen()関数に渡して読み込みます。続いて読み込んだ情報をPyPDF2.PdfFileReader()メソッドに渡してオブジェクトを生成します。
import PyPDF2
#PDFファイルをバイナリ読み込みモードで開く
pdf_file = open("ファイル名を記載.pdf","rb")
#PyPDF2.PdfFileReader()メソッドに上記を渡してオブジェクト生成
pdf_filereader = PyPDF2.PdfFileReader(pdf_file)
上記は実行するPythonスクリプトと読みこむPDFファイルが同じディレクトリに配置されている前提として記述しています。
PyPDF2.PdfFileReader()オブジェクトを生成すると下記ができます。1つずつ見ていきましょう。
- PDF暗号を解除
- PDFの総ページ数を確認
- ページ番号を指定しテキスト情報を抽出
PDF暗号解除
PDFファイルが暗号化(パスワード付与)されているかの確認は、下記のように記述します。PDFが暗号化されている場合はTrueを返し、そうでない場合はFalseを返します。
pdf_filereader.isEncrypted
テキスト情報を抽出するためには、事前にPDFの暗号解除が必要です。暗号解除はdecrypt()関数にパスワードを渡すことで実現できます。下記を実行してみましょう。
pdf_filereader.decrypt("パスワードを入力")
PDFの総ページ数を確認
PDFファイルの総ページ数は、PdfFileReaderオブジェクトのnumPages属性を用いて取得できます。
pdf_filereader.numPages
ページ番号を指定しテキスト情報を抽出
特定ページのテキスト情報抽出は、下記を記述して実行します。
#ページ番号を記述
page_num = 1
#getPage()メソッドにページ番号を渡し、対象ページのPDF情報を指定
pdf_text = pdf_filereader.getPage(page_num -1)
#extractText()メソッドをもとにテキスト情報抽出
pdf_text.extractText()
PdfFileReaderオブジェクトにgetPage()メソッドでページ番号を指定した後、extractText()メソッドでテキスト情報を抽出するのがポイントです。
ここでPythonを用いてページ番号を指定する際は、0ページ目から数えることに注意が必要です。そのため、PDFファイルと整合取れたページ番号を指定するために、ページ番号から1を引いた数値をGetPage()メソッドに渡すように記載しています。
本記事で紹介したプログラム全量まとめ
本記事で紹介したプログラムの全量を関数形式にまとめて以下紹介します。
import PyPDF2
filename = "ファイル.pdf" #読み込むPDFファイル名を記載しましょう
password = "" #読み込むPDFファイルにパスワードが付与されている場合、パスワードを記載しましょう
page_num = [1,2,5] #テキストを取得したいページ番号を記載しましょう
def pdf_text_extract(filename,password,page_num):
#PDFファイルをバイナリ読み込みモードで開きオブジェクト生成
pdf_file = open(filename,"rb")
#PyPDF2.PdfFileReader()メソッドに上記生成したオブジェクトを渡す
pdf_filereader = PyPDF2.PdfFileReader(pdf_file)
#PDFが暗号化されているか確認
if pdf_filereader.isEncrypted == True:
#PDFが暗号化されている場合はdecrypt()関数に文字列でパスワードを渡して呼び出す
pdf_filereader.decrypt(password)
#テキスト情報を格納するリスト
output = []
for i in page_num:
#getPage()メソッドにページ番号を渡し、対象ページのPDF情報を指定
pdf_text = pdf_filereader.getPage(i-1)
#extractText()メソッドをもとにテキスト情報抽出し、リストに格納
output.append({str(i)+"ページ情報":pdf_text.extractText()})
return output
第一引数に読み込むpdfファイル名、第二引数にパスワード、第三引数にテキスト情報を取得したいページ番号を記載したリストを渡し、pdf_text_extract()関数を実行すると動作します。
ここで読み込むPDFファイルが暗号化されていない場合は第二引数は””のまま実行すると問題なしです。
【参考】Pythonで面倒な作業を自動化!手法一挙公開中!
当サイトでは日々面倒な作業をPythonで自動化する方法を多数配信しております。日々の作業が飛躍的効率化できること間違いなしですので、以下気になった記事があれば併せてご覧ください。
【面倒なタスクをPythonで解決!】作業効率化の人気記事一覧
【参考】Pythonとは?・実現できること
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら