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

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

英語版PDFファイルから特定のテキスト情報を自由に取得したい」本記事ではこの要望を満足させます。記事前半ではPythonを用いたテキスト情報取得手順の概要を紹介し、後半では実際のプログラミング手法を紹介します。

目次

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

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

Pythonでは「PyPDF2」という英語版PDF文書を操作できるモジュールがあり、それを用いてPDFからテキスト情報を抽出できます。(このモジュールを用いたテキスト認識は、日本語板PDFに活用すると文字化けするため、英語版PDFのみ対応です

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

PyPDF2モジュール

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

pip install PyPDF2

【参考】PDFソフトで全てのPDFタスクを取り扱う方法

Python言語で構築することに障壁がある方向けに、ノーコードかつ手軽にPDFタスクに対応できるソフトを紹介します。Pythonで構築した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とは?・実現できること

最後に

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

本記事をシェア!
目次