【Python】フォルダ内のPDFファイルから指定キーワードを抽出して一覧出力する方法

【Python】フォルダ内のPDFファイルから指定キーワードを抽出して一覧出力する方法 Python

業務の中で、複数のPDFファイルから特定の語句を探したいケースは多々あります。例えば、「契約」「納品」「期限」などの文言が含まれているかを確認する作業を、Pythonで自動化する方法を紹介します。今回はpdfplumberを使ってPDFからテキストを抽出し、指定キーワードの有無を調べて結果をCSVに出力します。

使用するライブラリのインストール

まずはPDFからテキストを読み取るためにpdfplumberを使います。インストールされていない場合は以下のコマンドでインストールします。

pip install pdfplumber

Pythonスクリプトの全体構成

以下のスクリプトでは、指定したフォルダ内のすべてのPDFファイルに対して処理を行います。各ファイル内にキーワードが含まれているかを判定し、結果をCSV形式で出力します。

import os
import csv
import pdfplumber

# PDFファイルを格納したフォルダパス
pdf_folder = 'pdfs'
# 検索するキーワードのリスト
keywords = ['契約', '納品', '期限']
# 出力ファイル
output_csv = 'pdf_keyword_results.csv'

# 検索結果を保存するリスト
results = []

# フォルダ内の全PDFファイルを処理
for filename in os.listdir(pdf_folder):
    if filename.endswith('.pdf'):
        file_path = os.path.join(pdf_folder, filename)
        with pdfplumber.open(file_path) as pdf:
            full_text = ''
            for page in pdf.pages:
                full_text += page.extract_text() or ''
        
        # 各キーワードの有無を判定
        found_keywords = []
        for keyword in keywords:
            if keyword in full_text:
                found_keywords.append(keyword)
        
        # 結果を保存
        results.append({
            'ファイル名': filename,
            '含まれるキーワード': ', '.join(found_keywords) if found_keywords else 'なし'
        })

# 結果をCSV出力
with open(output_csv, 'w', newline='', encoding='utf-8-sig') as csvfile:
    fieldnames = ['ファイル名', '含まれるキーワード']
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()
    for row in results:
        writer.writerow(row)

print(f'検索結果を {output_csv} に保存しました。')

実行結果の例

たとえば、フォルダ内に次のような3つのPDFがあるとします。

contract1.pdf:契約と納品を含む
delivery2.pdf:納品のみ含む
other3.pdf:キーワードを含まない

出力されるCSVは以下のようになります。

ファイル名,含まれるキーワード
contract1.pdf,契約, 納品
delivery2.pdf,納品
other3.pdf,なし

まとめ

本記事では、PDFファイルから複数のキーワードを検索して、結果を一覧で出力するPythonスクリプトを紹介しました。定期的な文書レビューや大量の書類確認が必要な業務において、大幅な時間短縮が可能になります。今後は抽出した文章の前後文も含めるような機能を追加すれば、より柔軟な文書解析が可能になります。