1. テキストの抽出
PDFドキュメントから情報を取得する必要があるとき、会計報告、調査、またはお気に入りの電子書籍など、誰もが一度はその状況に遭遇したことがありますよね。でも、手動でなくプログラム的にテキストを抽出したい場合はどうしますか?ここでPythonとそのすごいライブラリPyPDF2の出番です。
テキストを抽出する基本ステップ
PDFからテキストを抽出するには、以下の簡単な手順に従う必要があります:
- PDFファイルを読み込む。
- PDFの内容をパースする。
- 後で分析するためにテキストを抽出する。
2. PDFファイルの読み取りとパース
PythonでPDFドキュメントを開いて読み込む方法を見てみましょう。最初に、PyPDF2をインポートする必要があります:
import PyPDF2
次に、PDFドキュメントを開きます。たとえば、解析したいsample.pdf
というファイルがあると仮定します。このファイルをロードして、ページ数を調べましょう。
PDFファイルのロード
# PDFファイルを開く
with open("sample.pdf", "rb") as pdf_file:
# PDF Readerオブジェクトを作成
pdf_reader = PyPDF2.PdfReader(pdf_file)
# 総ページ数を取得
num_pages = len(pdf_reader.pages)
print(f"ドキュメントの総ページ数: {num_pages}")
テキストの抽出
PDFドキュメントを開いたら、次はそこからテキストを抽出しましょう。そのためには:
PdfReader
がPDFファイルを読み取ります。for
ループを利用してすべてのページを巡回し、extract_text()
を呼び出してテキストを抽出します。- 抽出されたテキストは
text
という変数に保存され、出力したり処理したりできます。
以下はその例です:
import PyPDF2
# PDFファイルを開く
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
text = ""
# 各ページからテキストを抽出
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
text += page.extract_text() + "\n"
print(text)
特定のページのテキスト抽出
特定のページからだけテキストを抽出したい場合はどうしますか?例えば、3ページ目だけのテキストを抽出したいと仮定しましょう。それは次のようにします:
import PyPDF2
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
page = pdf_reader.pages[2] # 3ページ目のテキストを抽出 (インデックス2)
text = page.extract_text()
print(text)
この例では、3ページ目のテキストだけを抽出しています。ドキュメントに多くのページがある場合や処理を制限したい場合に便利です。PyPDF2ではページ番号は0から始まります。
3. PDFテキスト処理の自動化
PDFから抽出したテキストを分析や処理に利用できます。PyPDF2はこのプロセスを自動化する機能を提供しており、大量のドキュメントを処理する際に特に便利です。
テキストを別ファイルに保存
後で分析しやすいように、抽出したテキストをテキストファイルに保存することができます。これにより、その後の処理が簡単になります。
import PyPDF2
# PDFファイルを開く
with open("sample.pdf", "rb") as pdf_file:
pdf_reader = PyPDF2.PdfReader(pdf_file)
text = ""
for page_num in range(len(pdf_reader.pages)):
page = pdf_reader.pages[page_num]
text += page.extract_text() + "\n"
# 抽出したテキストをファイルに保存
with open("extracted_text.txt", "w", encoding="utf-8") as text_file:
text_file.write(text)
抽出したテキストの処理と分析
抽出したテキストをPythonで分析できます。そのためには、re
(正規表現)、nltk
(Natural Language Toolkit)、pandas
のようなライブラリをよく使用します。
単語のカウントとキーフレーズの検索
例えば、extracted_text.txt
というテキストファイルがあり、特定の単語やフレーズの頻度を調べたい場合:
import re
# 抽出したテキストを開く
with open("extracted_text.txt", "r", encoding="utf-8") as text_file:
text = text_file.read()
# キーワードの検索とカウント
keywords = ["report", "データ", "分析"]
keyword_counts = {keyword: len(re.findall(keyword, text, re.IGNORECASE)) for keyword in keywords}
print("キーワードの頻度:", keyword_counts)
ここでは:
- 保存したテキストを開きます。
- 正規表現を使用してキーワードをカウントします(大文字小文字を区別しません)。
- 各キーワードの出現頻度を取得します。
4. PyPDF2のメリットと制限
メリット:
- テキストの基本抽出やページ処理の操作が簡単。
- 主な操作をサポート:テキストの読み取り、ドキュメントの統合や分割。
- Pythonの他のライブラリと簡単に統合可能。
制限:
- 複雑なPDF(多段階のフォーマット、表、画像など)のテキスト抽出は上手くいかない場合がある。
- 画像や表の直接抽出をサポートしていない。
- 暗号化やパスワード保護されたファイルの処理をサポートしていない(ただし、パスワードが分かれば保護を解除することは可能)。
GO TO FULL VERSION