業務の中で、複数の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スクリプトを紹介しました。定期的な文書レビューや大量の書類確認が必要な業務において、大幅な時間短縮が可能になります。今後は抽出した文章の前後文も含めるような機能を追加すれば、より柔軟な文書解析が可能になります。