技術は使ってなんぼ

自分が得たものを誰かの役に立てたい

【Python】論文翻訳ツールをpdfから読み込めるようにしてみた【pdfminer】【ChatGPTの前段】

こんにちは。

3月から新しい転職先で働き始めました。

大手→ベンチャーへの転職ですが、とても清々しい環境で働いております。

さて新しい転職先でも論文要約業務は存在するので、論文を如何に素早く吸収するかが重要となります。

最近ではChatGPTの活用方法でにぎわっておりますが、私も業務にChatGPTを応用できないかと色々検討しております。

ゆくゆくは論文を自動でChatGPTに読み込ませ、1日1個は論文の要約や解説を自動で吐かせる仕組みを作りたいなと思っております。

そんなわけで、今回はその前段ともなる論文データの加工と翻訳するツールを更にレベルアップしてみたので紹介します。

それではよろしくお願いします。

前回までのあらすじはこちら
yonesuke0716.hatenablog.com

今回はここから更にレベルアップを図っていこうと思います。

多機能化してきたので、機能ごとにファイルをわける

今まではmain.pyの中に機能をつらつらと書いていましたが、流石にどこからどこまでがどの機能か、これ以上追加したらわからなくなってしまいます。

なので機能ごとにファイルを分けようと思います。

機能は大きく分けると以下のようになります。

  • txtファイル、またはpdfファイルを読み込む(詳細は後述)
  • 読み込んだテキストファイルの整形
  • 整形したテキストファイルの翻訳

なのでそれぞれの機能を「read_pdf.py」「txt_format.py」「translate.py」とします。

構造

こうすることで、main関数内が以下のようにスッキリしました。

def main():
    # pdfファイル指定時
    if file_path.endswith("pdf"):
        out_txt = read_pdf.pdf_to_txt(file_path)
    # txtファイル指定時
    elif file_path.endswith("txt"):
        with open(file_path, encoding="utf-8") as f:
            l_strip = [s.strip() for s in f.readlines()]
        out_txt = " ".join(l_strip)
    # テキストファイルの整形
    text_file_list, format_list = txt_format.txt_format(out_txt, str_thresh)
    # 英語→日本語
    translate.english_to_japanese(text_file_list, format_list)

詳しくはいつものGitにアップしております。
github.com

「txt_format.py」「translate.py」は前回の内容をそのままコピペしたようなイメージです。

txt_format.pyは前回までかなり細かい削除条件つけてましたが、論文ではあまり要らないと思ったので今回から一部削除しております。

では今回新しく追加した機能となる「read_pdf.py」について解説していきます。

txtファイルだけでなく、pdfファイルからも直接読み込ませるようにする

前回まではtxtファイルからしか翻訳できませんでした。

実際の論文はpdfですし、更に大量の論文データを取り扱うとなるとtxtにコピペなんてやってられません。

なので直接pdfを渡すだけで翻訳できるようにしたいと思います。

そこで便利なPythonライブラリ。

pdfを読み込むライブラリはいくつかありますが、今回はpdfminerを使っていきます。

いつものようにpipでインストールしましょう。

$ pip install pdfminer.six

pdfminerでテキストを抽出する場合、ほとんど自由度はなさそうです。

なので詳細は割愛しますが、ほぼテンプレートに近いものを使っていきます。

テスト

今回は以下の論文でテストしてみます。

arxiv.org

OpenAIの論文です。

これをダウンロードし、仮に「test.pdf」と名前を変えて、main.pyと同じ階層に置きます。

そしてconfig.ini内のfile_path = test.pdfと変更して保存します。

後はいつもの通り、main.pyを実行します。

実行結果

実行結果はこんな感じ。

翻訳結果

良い感じに翻訳できてそうです。

原文も.(ピリオド)で一文まとまっているので、翻訳も比較的わかりやすくなっているはずです。

まとめ

さてツールとして大分有効性が出てきたツールですが、後はChatGPTでどう要約・解説させるかですね。

GPT3のAPIは存在するので、実装はそう難しくないのですが、課題は以下の2点ですかね。
・文字数制限がある
・無料ではない(無料枠はある)

特に1点目が厄介ですよね。全体を読み込ませた上で要約・解説してほしいところなので。

いずれは無制限になるだろうし、無料になる時代も来るでしょうが、それまでの現状の制限の中、どう実装するか悩ましいところです。

最後に今回のGitを載せておきますので、良かったら使ってみてください。
github.com

おまけ(参考書籍)

新しい転職先ではソースコードの品質向上の役割も期待されていたため、急遽リーダブルコードを見直したりしています。

この本は昔から人気の書籍ですし、個人的にもわかりやすく実務でも意識したいところなのでおすすめです。