【Python】PDFファイルからテキスト情報を抽出する方法

当ページには広告が含まれています。

こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!

こんな方におすすめ!
  • Pythonを用いてPDFからテキスト情報を取得手順が知りたい!
  • PDFファイルから特定のテキスト情報を自由に取得するコードを理解したい!
目次

PythonでPDFファイルのテキスト情報を抽出する手順

図:PDFファイルからテキスト情報を取得する手順

Pythonでは「PyPDF2」というPDF文書を操作できるモジュールがあり、それを用いてPDFからテキスト情報を抽出できます。

実際の手順ではまず、PyPDF2を用いてオブジェクトを生成し、PDFにパスワードがかかっている場合は解除した後、ページ番号を指定して順に文書情報抽出するという流れになります。

PyPDF2とpycryptodomeモジュール

PDFを扱うPyPDF2とpycryptodomeモジュールを事前にインストールする必要があります。コマンドラインから下記を実行し、インストールしておきましょう。

pip3 install PyPDF2 pycryptodome

【参考】PDFタスク自動化の学習におすすめの教材

Pythonを活用してPDFタスクの自動化手法を深く学びたい方向けに、おすすめの教材も併せてご紹介します。

Pythonを用いたPDFのテキスト情報取得実践

それでは実際にPythonを活用してプログラムを記述していきましょう!

PDFファイル読込・オブジェクト生成

テキスト情報を抽出したいPDFファイルをPdfReader()に渡します。

from PyPDF2 import PdfReader

# PDFファイル名を記載
pdf_reader = PdfReader("ファイル名.pdf")

# ページ数を取得
page_num = len(pdf_reader.pages)
print(f"ページ数: {page_num}")

# ページ毎のテキストを抽出
for i in range(page_num):
    print(f"\n=============PAGE{i+1}================\n")
    page = pdf_reader.pages[i]
    text = page.extract_text()
    print(text)

上記は実行するPythonスクリプトと読みこむPDFファイルが同じディレクトリに配置されている前提として記述しています。

PdfReader()をもとに下記ができます。1つずつ見ていきましょう。

  • PDF暗号を解除
  • PDFの総ページ数を確認
  • ページ番号を指定しテキスト情報を抽出

PDF暗号解除

PDFファイルが暗号化(パスワード付与)されているかの確認は、下記のように記述します。PDFが暗号化されている場合はTrueを返し、そうでない場合はFalseを返します。

# PDFファイル名を記載
pdf_reader = PdfReader("ファイル名.pdf")

# 暗号化されているか否か判定
if pdf_reader.is_encrypted:
    print("パスワード有")
else:
    print("パスワード無")

テキスト情報を抽出するためには、事前にPDFの暗号解除が必要です。暗号解除はdecrypt()関数にパスワードを渡すことで実現できます。下記を実行してみましょう。

# PDFファイル名を記載
pdf_reader = PdfReader("ファイル名.pdf")

# 暗号化されているか否か判定
if pdf_reader.is_encrypted:
    print("パスワード有")
    pdf_reader.decrypt("パスワード入力")    # 追加
else:
    print("パスワード無")

PDFの総ページ数を確認

PDFファイルの総ページ数は、pages属性を用いて取得できます。

# ファイル名を直接渡す
pdf_reader = PdfReader("ファイル名.pdf")

# ページ数を取得
page_num = len(pdf_reader.pages)
print(page_num)

ページ番号を指定しテキスト情報を抽出

特定ページのテキスト情報抽出は、下記を記述して実行します。

from PyPDF2 import PdfReader

# ファイル名を直接渡す
pdf_reader = PdfReader("ファイル名.pdf")

# ページ数を取得
page_num = len(pdf_reader.pages)
print(f"ページ数: {page_num}")

# 該当のページ番号のデータ取得
page = 0
page = pdf_reader.pages[page]
text = page.extract_text()
print(text)

PdfFileReaderオブジェクトにgetPage()メソッドでページ番号を指定した後、extractText()メソッドでテキスト情報を抽出するのがポイントです。

ここでPythonを用いてページ番号を指定する際は、0ページ目から数えることに注意が必要です。

本記事で紹介したプログラム全量まとめ

本記事で紹介したプログラムの全量を関数形式にまとめて以下紹介します。

from PyPDF2 import PdfReader

file_name = "xxxx.pdf"
password  = ""

def pdf_text_extract(file_name,password=None)->list:
    # ファイル名を指定
    pdf_reader = PdfReader(file_name)

    # 暗号化されているか否か判定
    if pdf_reader.is_encrypted:
        pdf_reader.decrypt(str(password)) 
    
    # ページ数を取得
    page_num = len(pdf_reader.pages)
    print(f"ページ数: {page_num}")

    # ページ毎のテキストを抽出
    output_text = []
    for i in range(page_num):
        print(f"\n=============PAGE{i+1}================\n")
        text = pdf_reader.pages[i].extract_text()
        output_text.append(text)

    return output_text

if __name__ == "__main__":
    pdf_text_extract(file_name,password)

第一引数に読み込むpdfファイル名、第二引数にパスワードを記載したリストを渡し、pdf_text_extract()関数を実行すると動作します。

【参考】Pythonで面倒な作業を自動化!手法一挙公開中!

当サイトでは日々面倒な作業をPythonで自動化する方法を多数配信しております。日々の作業が飛躍的効率化できること間違いなしですので、以下気になった記事があれば併せてご覧ください。

【面倒なタスクをPythonで解決!】作業効率化の人気記事一覧




【参考】Pythonとは?・実現できること

最後に

この記事が気に入ったら
フォローしてね!

本記事をシェア!
目次