PDFからテキスト抽出して要約するため、ChatGPTを使ってpythonのスクリプトを生成した。

Step1:PDFからテキスト抽出するスクリプトのベースを作成

プロンプト

pypdf2を使用、pdfファイル名を引数にする、指定されたpdfファイルからテキストを抽出するサンプルコード

コマンドライン引数が必須になるように

生成されたコード

import sys
import PyPDF2

def extract_text_from_pdf(pdf_file_name):
    # PDFファイルをバイナリモードで開く
    with open(pdf_file_name, 'rb') as file:
        # PyPDF2のPdfFileReaderオブジェクトを作成
        pdf_reader = PyPDF2.PdfFileReader(file)
        
        # ページごとにテキストを抽出
        text = ''
        for page_num in range(pdf_reader.numPages):
            page = pdf_reader.getPage(page_num)
            text += page.extract_text()
            
        return text

# コマンドライン引数の数をチェック
if len(sys.argv) < 2:
    print("PDFファイル名を指定してください。")
    sys.exit(1)

# コマンドライン引数からPDFファイル名を取得
pdf_file_name = sys.argv[1]  # コマンドライン引数の最初の要素(インデックス1)を取得

# PDFファイル名を指定してテキストを抽出
extracted_text = extract_text_from_pdf(pdf_file_name)
print(extracted_text)

Step2:ファイルのパスを修正する要件の追加

pythonスクリプトをWSL2のUbuntuで動かしているので、コマンドプロンプトにファイルを貼り付けたときにC:から始まってうまく開けない。

要は、C:\Users\shiroma\ を C/Users/shiroma にしたい。

プロンプト

引数がC:から始まる文字列の場合、C:を/mnt/cに置き換えて、\を/に置き換えるようにしてください

生成されたコード

import sys
import PyPDF2

def extract_text_from_pdf(pdf_file_path):
    # PDFファイルをバイナリモードで開く
    with open(pdf_file_path, 'rb') as file:
        # PyPDF2のPdfFileReaderオブジェクトを作成
        pdf_reader = PyPDF2.PdfFileReader(file)

        # ページごとにテキストを抽出
        text = ''
        for page_num in range(pdf_reader.numPages):
            page = pdf_reader.getPage(page_num)
            text += page.extract_text()

        return text

# コマンドライン引数の数をチェック
if len(sys.argv) < 2:
    print("PDFファイルパスを指定してください。")
    sys.exit(1)

# コマンドライン引数からPDFファイルパスを取得
pdf_file_path = sys.argv[1]  # コマンドライン引数の最初の要素(インデックス1)を取得

# ファイルパスの置換
if pdf_file_path.startswith("C:"):
    pdf_file_path = pdf_file_path.replace("C:", "/mnt/c").replace("\\", "/")

# PDFファイルパスを指定してテキストを抽出
extracted_text = extract_text_from_pdf(pdf_file_path)
print(extracted_text)

Step3:deprecateな処理の書き換え

上記を実行すると、いくつか廃止された処理が使われているとエラーが出た。

PyPDF2.errors.DeprecationError: reader.numPages is deprecated and was removed in PyPDF2 3.0.0. Use len(reader.pages) instead.

PyPDF2.errors.DeprecationError: reader.getPage(pageNumber) is deprecated and was removed in PyPDF2 3.0.0. Use reader.pages[page_number] instead.

上記を手動で修正。

pdf_reader.numPages → len(reader.pages)

pdf_reader.numPages → pdf_reader.pages[page_number]

以上! 全部を任せるのは難しいけれども、これまでライブラリの使い方とかを調べていた時間がごっそり削られたのでだいぶ楽になった。