1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【保存版】PythonでPDFからテキスト抽出する方法(PyPDF2 / pdfplumber 徹底解説)

Posted at

PDFからテキストを抽出したい――業務でよくあるニーズの1つですが、Pythonには複数のライブラリがあり、用途に応じて使い分けが必要です。

この記事では、PyPDF2 と pdfplumber という2つの主要ライブラリを使って、「PDFのテキスト抽出」を実践的に解説します。

前提:Python環境とPDFファイルの準備

まずは必要なライブラリをインストールしましょう。

pip install PyPDF2 pdfplumber

テスト用のPDFは、以下のようなシンプルな構造でOKです。

PyPDF2を使う方法(レイアウトは無視)

✔ 特徴
軽量でシンプル

レイアウト無視(段組・表などが崩れる)

テキスト抽出が速い

▶ サンプルコード

import PyPDF2

with open('sample.pdf', 'rb') as f:
    reader = PyPDF2.PdfReader(f)
    for i, page in enumerate(reader.pages):
        text = page.extract_text()
        print(f'--- Page {i+1} ---')
        print(text)

📝 実行結果(例)

diff

--- Page 1 ---
見出し
本文が続きます。

pdfplumberを使う方法(レイアウト保持)

✔ 特徴
表・改行・段組の認識に強い

文字の位置情報(x, y座標)も取得可能

処理はやや重め

▶ サンプルコード

import pdfplumber

with pdfplumber.open('sample.pdf') as pdf:
    for i, page in enumerate(pdf.pages):
        text = page.extract_text()
        print(f'--- Page {i+1} ---')
        print(text)

📝 表抽出なども可能!

tables = page.extract_tables()
for table in tables:
    for row in table:
        print(row)
ライブラリ 適している場面 注意点
PyPDF2 単純なテキスト取得 レイアウトが崩れる可能性
pdfplumber 表や段組・改行が重要なPDF 処理がやや重い

応用アイデア

自動で複数PDFを一括処理してExcelにまとめる(→ pandas連携)

重要ワードの抽出・自然言語処理と組み合わせる

テキストから帳票番号・日付などを正規表現で抽出

まとめ

PythonでPDFのテキストを抽出するには、PyPDF2(軽量・シンプル)とpdfplumber(高精度) を使い分けるのが基本です。

✔ PyPDF2:速くて軽い。構造が単純なPDF向け
✔ pdfplumber:精度重視。帳票や表、段組などに対応

関連リンク

PyPDF2公式GitHub

pdfplumber公式GitHub

関連記事:PythonでPDFからテキスト抽出する方法(サイト版)

🙋‍♂️ おわりに
PDF処理は「業務自動化」の第一歩として非常に有効です。この記事が、みなさんの業務効率化に役立てば幸いです!

「OCR付きPDFの処理」や「PDFを分割・結合したい」といった応用ニーズがあれば、ぜひコメントで教えてください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?