2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PDFからテキストを抽出するPythonプログラムの解説

Posted at

Pythonを使ってPDFファイルからテキストを抽出する方法を勉強してみましたのでこちらで共有します。
特に、pdfminer.sixというライブラリを使用します。
このライブラリは、PDFの内容を解析し、テキストを取り出すのに非常に便利です。

1. 環境の準備

まず、pdfminer.sixをインストールする必要があります。
ターミナルを開いて、以下のコマンドを実行してください。

qiita.rb
pip install pdfminer.six

2. コードの全体像

以下が、PDFからテキストを抽出するためのPythonコードです。

qiita.rb
from pdfminer.high_level import extract_text
from pdfminer.layout import LAParams
from pdfminer.pdfinterp import PDFResourceManager
from pdfminer.converter import TextConverter
from pdfminer.pdfinterp import PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
import os
import io

# 入力ファイル
pdf_folder = r"C:\example\pdf_folder"  # PDFファイルのフォルダ
pdf_filename = "example.pdf"  # PDFファイル名
# 出力ファイル
output_folder = r"C:\example\output_folder"  # Excelファイル出力先フォルダ
output_filename = "output.txt"  # テキストファイル名

def pdf_to_text_with_pdfminer(pdf_path, output_text_path):
    try:
        # PDFファイルを開く
        with open(pdf_path, 'rb') as pdf_file:
            # PDFResourceManagerの作成
            resource_manager = PDFResourceManager()
            
            # 出力ストリームを作成
            output_stream = io.StringIO()
            
            # LAParamsでレイアウト解析パラメータを設定
            laparams = LAParams()
            
            # TextConverterを作成
            device = TextConverter(resource_manager, output_stream, laparams=laparams)
            
            # PDFPageInterpreterを作成
            interpreter = PDFPageInterpreter(resource_manager, device)
            
            # 各ページを処理
            for page in PDFPage.get_pages(pdf_file):
                interpreter.process_page(page)
            
            # テキストを取得
            text = output_stream.getvalue()
            
            # テキストファイルに書き込む
            with open(output_text_path, 'w', encoding='utf-8') as text_file:
                text_file.write(text)
            
            # 後処理
            device.close()
            output_stream.close()
            
            print(f"PDFからテキストを抽出しました: {output_text_path}")
    except Exception as e:
        print(f"エラーが発生しました: {e}")

# ファイルパスの組み立て
pdf_path = os.path.join(pdf_folder, pdf_filename)
output_text_path = os.path.join(output_folder, output_filename)

# 出力フォルダが存在しない場合は作成
os.makedirs(output_folder, exist_ok=True)

# 関数を実行
pdf_to_text_with_pdfminer(pdf_path, output_text_path)

3. コードの解説

3.1 ライブラリのインポート

最初に必要なライブラリをインポートします。pdfminerの各コンポーネントを使ってPDFを解析します。

3.2 入力と出力の設定

pdf_folder: PDFファイルが保存されているフォルダのパス。
pdf_filename: 抽出したいPDFファイルの名前。
output_folder: 抽出したテキストを保存するフォルダのパス。
output_filename: 保存するテキストファイルの名前。

3.3 PDFからテキストを抽出する関数

pdf_to_text_with_pdfminer関数では、以下の処理を行います。

PDFファイルを開く。
PDFResourceManagerを作成し、リソースを管理します。
StringIOを使って出力ストリームを作成します。
LAParamsを使ってレイアウト解析のパラメータを設定します。
TextConverterを作成し、PDFの内容をテキストに変換します。
PDFPageInterpreterを使って各ページを処理します。
抽出したテキストを指定したファイルに書き込みます。

3.4 エラーハンドリング

try-exceptブロックを使って、エラーが発生した場合にメッセージを表示します。

3.5 実行部分

最後に、ファイルパスを組み立て、出力フォルダが存在しない場合は作成し、関数を実行します。

4. まとめ

このプログラムを使うことで、PDFファイルから簡単にテキストを抽出することができます。PDFの内容を分析したり、データを整理したりする際に非常に役立つツールです。ぜひ試してみてください!

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?