CodeGym /Javaコース /Python SELF JA /PDFドキュメントからテキストを抽出してデータ分析を行う

PDFドキュメントからテキストを抽出してデータ分析を行う

Python SELF JA
レベル 43 , レッスン 2
使用可能

1. テキストの抽出

PDFドキュメントから情報を取得する必要があるとき、会計報告、調査、またはお気に入りの電子書籍など、誰もが一度はその状況に遭遇したことがありますよね。でも、手動でなくプログラム的にテキストを抽出したい場合はどうしますか?ここでPythonとそのすごいライブラリPyPDF2の出番です。

テキストを抽出する基本ステップ

PDFからテキストを抽出するには、以下の簡単な手順に従う必要があります:

  1. PDFファイルを読み込む。
  2. PDFの内容をパースする。
  3. 後で分析するためにテキストを抽出する。

2. PDFファイルの読み取りとパース

PythonでPDFドキュメントを開いて読み込む方法を見てみましょう。最初に、PyPDF2をインポートする必要があります:

Python

import PyPDF2

次に、PDFドキュメントを開きます。たとえば、解析したいsample.pdfというファイルがあると仮定します。このファイルをロードして、ページ数を調べましょう。

PDFファイルのロード

Python

# 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という変数に保存され、出力したり処理したりできます。

以下はその例です:

Python

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ページ目だけのテキストを抽出したいと仮定しましょう。それは次のようにします:

Python

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はこのプロセスを自動化する機能を提供しており、大量のドキュメントを処理する際に特に便利です。

テキストを別ファイルに保存

後で分析しやすいように、抽出したテキストをテキストファイルに保存することができます。これにより、その後の処理が簡単になります。

Python

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というテキストファイルがあり、特定の単語やフレーズの頻度を調べたい場合:

Python

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(多段階のフォーマット、表、画像など)のテキスト抽出は上手くいかない場合がある。
  • 画像や表の直接抽出をサポートしていない。
  • 暗号化やパスワード保護されたファイルの処理をサポートしていない(ただし、パスワードが分かれば保護を解除することは可能)。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION