ChatGPT を利用して、自動で論文を翻訳します。
このツールは私がGitHubにアップロードしている他の多くのツールと違いkojix2の個人用ツールです。 Gem サーバーには公開しません。ソースコードからインストールしてください。
gem install specific_install
gem specific_install https://github.com/kojix2/PaperClippers
- Zotero を使ってウェブページのスナップショットを取る
- Ruby の Nokogiri を使って論文を分割して保存する
- ChatGPT の API 版で翻訳する
- 生成されたテキストファイルの統合、マークダウン化
- Pandocによる日本語PDF/DOCXの生成
- Firefox - ブラウザ
- Zotero - 文献管理ソフト
- Ruby - プログラミング言語
- chatgpt-cli - Crystal で作成されたコマンドラインツール
最初に、論文からテキストを抽出します。PDF ではなく HTML からスクレイピングします(スクレイピングには「XPath」を使います)。しかし、論文が掲載されているウェブサイトの多くは簡単にスクレイピングさせてくれません。403 Forbidden となってしまいます。 そこで、「Zotero」を使ってスナップショットをローカルに保存し、そのローカルの HTML ファイルに対してスクレイピングを行います。
文献管理ソフトである Zotero で論文を保存します。私は Firefox の拡張機能を使用しています。保存された論文を右クリックして「スナップショットを閲覧する」を選択すると、ローカルに保存された HTML ファイルをブラウザで開くことができます。
/home/kojix2/Zotero/storage/HOGEFUGA/S1234567890123456789.html
後でこのファイルパスを使用します。
トークン数の制限を回避するために論文を各セクションごとに分割してファイルに保存します。はじめに、各セクションが HTML 内でどのように表現されているかを確認します。
Firefox の画面で、論文本文中の「調査」をクリックします。インスペクタを開き、HTML のソースコードを確認します。例えば Cell 紙の場合は、以下のようにセクションが並んでいることがわかります。
右クリックで、「コピー」>「XPath」を選択します。すると、XPath がクリップボードにコピーされます。
//*[@id="sec1"]
この XPath に対応する本文を抽出し、適切に改行を入れるような小さなコマンドラインツールを Ruby で作成しました。
kirinuki [options]
Example: ruby kirinuki.rb -f 'path/to/your.html' -p '//*[@id="sec{}"]' -r '1..12'
-f, --file HTML_PATH HTML file path
-x, --xpath XPATH XPath
-r, --range RANGE Range
-o, --output OUTPUT_DIR Output directory
例に従って、先ほど作成したツールを実行します。「{}」の部分が、range のイテレータの各要素に置き換わります。range
は eval
で評価されるため、応用的な使い方も可能です。セキュリティの観点から eval
はなるべく使わない方が良いとされていますが、今回はローカルのファイルを変換するだけなので問題ありません。
ここでは、自作のchatgpt-cli を使います。それなりに便利なツールですが、一般向けに作られていないので、興味がある方のみご利用ください。ここではその基本的な機能のみを使います。他の ChatGPT 向けコマンドラインツールでも同じことができるでしょう。
まずは、翻訳用のプロンプトのテンプレートを作ります。
次の論文のアブストラクトを読んでください。
# ここにアブストラクトやサマリーを貼り付ける
読み終わったら、以下のセクションを翻訳してください。わかりやすく平易な文章でお願いします。翻訳された文章だけ回答してください。専門的な科学用語はカッコを用いて日本語(英語)の形で併記してください。
---
上記のテンプレートはさらに改良できるでしょう。例えば、専門用語を英語で併記させるなどの工夫が可能です。
これで、cat prompt.txt idsec1.txt
とすると、プロンプト、翻訳対象の英文、がその順に出力されます。これを標準入力から chatgpt-cli
に渡します。
cat prompt.txt idsec1.txt | chatgpt -M gpt-4 > idsec1_ja.txt
さらに、連番を使ってシェルスクリプトを作成します。
seq 1 12 | xargs -t -I{} sh -c 'cat prompt.txt idsec{}.txt | chatgpt -M gpt-4 > idsec{}_ja.txt'
FIXME: 連番はナチュラルソートしにくいという問題がある。命名規則を規約化する、連番のつけかたを00xのようにする、ファイルの生成時間順にするなどの工夫が必要
あとは十分に時間をかけて待つことで、翻訳されたテキストファイルが生成されます。 このプロセスはかなり時間がかかりますので、根気よく待ちましょう。
https://github.com/kojix2/bleach
ファイルの統合は単にcatコマンドを使い、自動修正はVSCodeの機能を利用する
dockerを利用する具体的には
kirinuki --prompt pandoc
最短で数ヶ月、最長で 1 年後には、論文全体が ChatGPT のトークンに収まるようになると思います。そのため、ここで述べているような論文を分割してトークン数に収める方法は遅かれ早かれ必要なくなるでしょう。しかし、現時点ではトークン数に限界があるため、このような工夫が必要です。
いずれ便利なツールが開発され、ボタン一つで簡単に翻訳できるようになると良いですね。