【Python】PDFから欲しいデータを取り出す!Pythonのpdfplumberと正規表現、csvで一括変換する方法

1. はじめに

「PDFから表や特定の文字列を自動で抜き出したい」というニーズは多くあります。本記事ではPythonの pdfplumberre(正規表現)csv を組み合わせて、まるでAIのように効率よく情報を取り出す方法を解説します。

2. 使用するPythonライブラリの説明

  • pdfplumber:PDFの中身(テキスト・表)を簡単に抜き出せる外部ライブラリ。OCR不要で構造を維持して抽出できます。
  • re(正規表現):特定の文字パターン(例:電話番号、日付)を検出・抽出する標準ライブラリ。
  • csv:抽出したデータをCSV形式で保存する標準ライブラリ。Excel等で開ける形で出力。

3. 環境構築とインストール

pip install pdfplumber
  

4. PDFからテキストを抽出する

📄 コード例
import pdfplumber

with pdfplumber.open("sample.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)
解説:
pdfplumber.open(“sample.pdf”):PDFを開く
pdf.pages:ページリスト
extract_text():文字列抽出
with文:自動クローズで安全

5. 正規表現で必要な情報を抽出する

📄 コード例
import re

pattern = r"電話番号: (\d{2,4}-\d{2,4}-\d{4})"
matches = re.findall(pattern, text)
print(matches)
解説:
r””:生文字列。
\d{2,4}:2~4桁の数字
:ハイフン
re.findall():全件マッチリスト返却
例: 電話番号: 03-1234-5678 → [’03-1234-5678′]

6. 抽出したデータをCSVファイルに保存する

📄 コード例
import csv

with open("output.csv", "w", newline="", encoding="utf-8") as f:
    writer = csv.writer(f)
    writer.writerow(["氏名", "電話番号"])  # ヘッダー行
    for name, phone in zip(names, phones):
        writer.writerow([name, phone])
解説:
open():書き込みモードで開く
csv.writer():CSV書き込み用
writerow():1行ずつ出力
zip():複数リストの同時ループ

7.よくあるエラーと対策

問題 原因例 解決法
テキストが抽出されない PDFが画像ベース OCR(Tesseract等)を併用
正規表現がマッチしない パターン違い テキストを出力してパターン確認
CSVが文字化け(Excelで) エンコーディング不一致 “utf-8-sig” を使う

8. まとめ

これらの技術を組み合わせれば、PDFからのデータ収集を“人の手を介さず”に行うことができます。AI的な自動処理の第一歩として、ぜひ活用してみてください!

🔍 関連キーワード(再掲)
Python PDF 自動処理 / pdfplumber 使い方 / Python 正規表現 抽出 / PDF CSV 変換 自動化 / Python データ収集 自動化 / Python AI風自動ツール