63
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

AutoHotkeyでPDFの英文テキストを最速で整形→翻訳する

 AutoHotkeyスクリプトを使い、PDF形式の英語論文からテキストを整形して素早く翻訳にかける方法を紹介します。                                                  

[導入手順]
1. AutoHotkey をインストールする
2. こちらのスクリプトをコピペして*.ahk形式で保存ダブルクリックで起動
3. ブラウザでDeepLを開き、翻訳したい文章を選択してCtrl + Shift + X

以上です。(所要時間: ~3分)
詳しい説明は本文の使い方を参照してください。

実際に操作している様子です。
コピーしたテキストの整形~右側の翻訳ウィンドウの操作が自動化されています。
deepl.gif

この記事の内容をざっくり3行で:

  • AutoHotkeyでテキスト整形→翻訳サイトに貼り付ける操作を自動化する
  • テキスト選択と任意のショートカットキーだけでサクサク翻訳できる
  • 改ページや図表をまたいだ文章も一度に翻訳できる

--

arXivなどオープンアクセスな論文サイトの充実により、最新の研究成果を誰でもいち早く閲覧できるようになりました。しかし、我々にとっての問題は、これらの論文は(当然ながら)英語で書かれているという点です。

大量の英語論文を素早く理解するにはもちろん、自身の英語能力を鍛えて日本語と同じくらいスラスラと読めるようにすること――ではなく、そう、機械翻訳の力を借りることです。

機械翻訳の進歩は目覚ましく、日本語⇔英語の翻訳も人間並みに(あるいはそれ以上に)正確で自然な文章に変換できるようになりました。このような翻訳サービスを活用し、効率的に論文を読み進めることができます。

ですが、PDF形式の論文からテキストを直接コピーすると、不要な改行が入ってしまったり、特殊文字や数式が崩れてしまったり、して上手く翻訳にかけれないことがあるかと思います。

この記事では、PDFからコピーしたテキストを整形し、翻訳サイトに貼り付けまでの処理を自動化するための方法を紹介します。

--

目次:
1. PDFからコピーするときの問題
2. AutoHotkeyとは
3. 動作環境
4. スクリプトの準備
5. 使い方
6. まとめ

1. PDFからコピーするときの問題

翻訳に限らず、PDFファイルからテキストをコピーしたとき、上手くいかなかった経験を持つ人は多いのではないでしょうか。

一番よくあるパターンとして、文章の途中で改行が入ってしまい、正確な翻訳ができなくなってしまうものです。

これを回避するために、例えばiPadOSで標準のブックアプリを使う方法が知られています。

ガチで論文読むスピード10倍になる。そう、iPadならね。
(iPad派の人は長時間iPadで論文を読んでいても疲れないのでしょうか…)

Windows環境では同様に、PDF.jsのデモページやChrome拡張機能のPDF Viewerを使えば、改行なくテキストコピーできるようです。

ところが今度は別の問題が出てきます。PDF.jsやPDF Viewerでは、文中に数式や記号があると前後の単語と結合してしまうことがあるようです。(反対に、改行が問題になるビューアでは数式・記号は崩れにくいです)

論文の学術領域にもよりますが、例えば数学や物理、情報科学といった分野の論文では数式や記号が文章中にも頻出するので、翻訳がうまくいかないケースが多くなります。

最後に、 ページ・図表またぎの文章を一度に選択できない問題です。

PDF形式の論文は、二段組だったり、途中で図表が挿入されていることで文章が途中で切れてしまっていることがよくあります。まとめて選択しようとすると、フッターやページ番号、図表のキャプションなども選択されてしまいます。

--

結局、Windows環境で一番確実な方法は、PDFビューアからコピーした文章を、逐一適当なテキストエディタで不要な改行を整形し、その上で翻訳サイトに貼り付けることのようです。

しかし、長く難解な論文を読み進めなければならないときに、トリビアルな操作に意識を割くのは効率的ではありません。

このようなPC上の単純作業を自動化する方法はないのでしょうか?

2. AutoHotkey とは

AutoHotkeyはWindows上で動作するスクリプト言語、およびそれを実行するユーティリティソフトウェアです。

当初は名前の通りショートカットキーをカスタマイズする目的として開発されていましたが、機能が拡張され続け、スクリプト言語としての使用できるほどになりました。

変数、関数、ポインタ、再帰、APIコール等、一般的なプログラミング言語と同等の機能が用意されています。
その一方で、デスクトップ操作に対応した多彩なコマンドが組み込まれており、マウスやキーボード操作に関する自動化マクロを簡単に記述することができます

  • キー割り当ての変更
  • キー入力の送信
  • ウィンドウの制御
  • ファイルの開閉
  • プログラムの起動、終了
  • マウスのクリック、マウスカーソルの移動

2000年代前半から開発されている老舗のソフトウェアですが、現在もGitHub上で盛んに開発が続けられています。

これを使えば、PDFのテキストを整形し、翻訳サイトに貼り付ける操作の自動化が実現できそうです。

3. 動作環境

  • Windows 10
  • AutoHotkey (1.1.x)

AutoHotkeyはWindows用のプログラムですので、この記事ではWindowsを対象に解説します。
MacやLinuxでも同様の機能をもつスクリプトを実装することはそれほど難しくないと思います。

AutoHotkeyは最新のバージョン1.1以降を使用します。(以前はAutoHotkey_Lと呼ばれていた拡張版で、現在も盛んに開発が進められています。)

公式サイトからDownloadDownload Current Versionを選択し、ダウンロード/インストールしてください。

翻訳に使うサービスはDeepLを利用していきます。
DeepLはドイツのLingueeという企業が開発している翻訳エンジン・サービスで、例えばGoogle翻訳などと比べても、非常に自然で正確な翻訳文を出力してくれます。

少し前に日本語に対応したことで話題になったので、利用している人も多いのではないでしょうか。

4. スクリプトの準備

実際に動作させるAutoHotkeyスクリプトを準備していきます。
といっても下記のコードをコピーして.ahk形式で任意の場所に保存するだけです。

AutoHotkeyがインストール済みなら、このファイルをダブルクリックするとスクリプトが起動します
あとはDeepLのサイトとPDFビューアを開き、テキストを選択して Ctrl + Shift + Xを繰り返すだけです。

スクリプトを編集することで、別のショートカットキーを割り当てることもできます。
また、起動中のスクリプトは、タスクトレイアイコンから右クリック→Exitで終了することができます。

translator.ahk
; Ctrl+Shift+X 押下時のスクリプト
;
; ^+x (=Ctrl+Shift+X) を任意のキーバインドに変更できます
; 例えば Ctrl+Shift+Alt+D なら ^+!d です
;
; Ctrl = ^
; Shift = +
; Alt = !
; Windows = #
^+x::
    ; ウィンドウ遷移やキー操作の待機時間(msec)
    ; 上手く機能しないときはこの値を大きくしてください
    wait_time = 50

    ; 現在アクティブのウィンドウ(PDF viewer)のIDを取得
    WinGet main_id, ID, A

    ; 改ページや図表で分断された段落を一度に翻訳するためには
    ; 前半部分を先に Ctrl+C でコピーしておき、後半部分を
    ; 選択状態にして Ctrl+Shift+Z を実行してください。

    first_half = %clipboard% ; Clipboardにテキストがあれば保存
    Send, ^c ; 選択部分をコピー
    Sleep %wait_time%
    if StrLen(first_half) > 0
        target_str = %first_half% %clipboard% ; 文字列を結合
    Else
        target_str = %clipboard%

    ; 改行コードをすべて空白に置換
    StringReplace, replaced_str, target_str, `r`n, %A_Space%, All
    clipboard = %replaced_str% ; クリップボードに代入

    ; 'DeepL...' というtitleのウィンドウを探します(前方一致)
    ; ウィンドウが存在しない場合、エラーメッセージを表示
    IfWinNotExist, DeepL
    {
        MsgBox, , , DeepL window not found.`r`nPlease keep DeepL open first!
        clipboard = ; クリップボードを空にして終了
        return
    }

    ; 予め開いておいたDeepL翻訳ウィンドウをアクティブに
    WinActivate, DeepL
    ; アクティブになるまで待機
    WinWaitActive, DeepL, , 2

    Send, ^a ; 原文のテキストフィールドを選択
    Send, ^v ; 置換されたテキストを貼り付け
    Sleep %wait_time%

    WinActivate, ahk_id %main_id% ;PDF viewerをアクティブに戻す
    Sleep %wait_time%
    clipboard = ; 毎回クリップボードを空にしておく
return

スクリプトの挙動を説明しておくと

 1. クリップボードにテキストがあれば保存
 2. PDFビューアで選択されているテキストをコピー → 前半部分と結合
 3. 改行を空白文字に置換
 4. DeepLウィンドウをアクティブにして貼り付け
 5. PDFビューアのウィンドウを再度アクティブに

という流れになっています。
もしスクリプトが上手く動かない場合はキー操作間の待機時間(wait_time)を調整してみてください。

AutoHotkeyの文法について詳しく知りたい方は下記を参考にしてください。

5. 使い方

 1. 保存した.ahkファイルをダブルクリックしてスクリプトを起動
 2. DeepLを開く(ブラウザ or デスクトップアプリケーション)
 3. PDFビューアで翻訳したいテキストを選択状態にする
 4. Ctrl + Shift + X
 5. スクリプトが走り、翻訳が展開される
 6. 3に戻る

改ページや図表またぎなど、分割された段落を翻訳したい場合3.の前に

 3'. 分割された前半部分を選択してCtrl + Cでクリップボードにコピー

という操作を追加すれば、コピーしておいた前半と、現在選択されている後半部分をひとつにまとめて翻訳してくれます。
deepl.gif
注意点として、DeepLのウィンドウはPDFビューアとは別のウィンドウであること、ウィンドウを選択した際に原文のテキストフィールドにフォーカスされた状態にしておく必要があります。(普通に起動するとその状態です)

英語論文を読むためのPDFビューアですが、Acrobat Reader DCChromeの内蔵PDFビューアなどでは問題なく動作しました。(Chromeの内蔵ビューアが、数式や特殊文字の再現率が高くてよさそう)

スクリプトの一連の動作が完了すると、元々アクティブだったPDFビューアのウィンドウが再度アクティブになりますので、続けて作業することが可能です。
起動中のスクリプトは、タスクトレイアイコンから右クリック→Exitで終了することができます。

これで最低限の操作で、PDF内の文章を翻訳することができるようになりました。

6. まとめ

AutoHotkeyを使って、PDF内の英文テキストを整形し、DeepLで翻訳する作業を自動化することができました。

人によっては、英語論文を読む際に機械翻訳に頼ることに抵抗を感じるかもしれません。私もかつてはそのように考えていました。

しかし冷静に考えると、自分の語学能力の向上より、機械翻訳の進歩のほうがずっと早いということに気がつきました。今では便利に使用するようになり、不慣れな分野の論文を読むときには特に重宝しています。

効率的に論文を読んで浮いた時間で、さらに多くの論文を読んだり、コードを書いたり、あるいはそれこそ英語の勉強をするのはいかがでしょうか。

Twitter(@ymg_aq)もやっていますので、よければこちらもお願いいたします。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
63
Help us understand the problem. What are the problem?