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

こんにちは、Kosei(@kay_diacc2)です!

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

目次

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

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

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

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

PyPDF2モジュール

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

pip install PyPDF2

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ファイルが暗号化されていない場合は第二引数は””のまま実行すると問題なしです。

最後に

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

本記事をシェア!
URLをコピーする
URLをコピーしました!
目次
閉じる