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

![ AutoHotkeyスクリプトを使い、PDF形式の英語論文からテキストを整形して素早く翻訳にかける方法を紹介します。　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　　](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125692/5da657d1-187c-70c6-59c6-159dd0dedc89.png)

**[導入手順]** 
1. [**AutoHotkey**](https://www.autohotkey.com/) をインストールする
2. [**こちら**](https://qiita.com/ymg_aq/private/df8993b297fccd1eaa41#4-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E6%BA%96%E5%82%99)のスクリプトをコピペして**`*.ahk`形式で保存** → **ダブルクリックで起動**
3. ブラウザで[**DeepL**](https://www.deepl.com/ja/translator)を開き、翻訳したい文章を選択して**`Ctrl + Shift + X`**

以上です。(所要時間: ~3分)
詳しい説明は本文の[**使い方**](https://qiita.com/ymg_aq/private/df8993b297fccd1eaa41#5-%E4%BD%BF%E3%81%84%E6%96%B9)を参照してください。

実際に操作している様子です。
コピーしたテキストの整形～右側の翻訳ウィンドウの操作が自動化されています。
![deepl.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125692/459c225b-202b-71c3-499d-66375601ec08.gif)

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

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

--

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

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

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

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

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

--

目次:
1. [PDFからコピーするときの問題](https://qiita.com/ymg_aq/private/df8993b297fccd1eaa41#1-pdf%E3%81%8B%E3%82%89%E3%82%B3%E3%83%94%E3%83%BC%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E5%95%8F%E9%A1%8C)
2. [AutoHotkeyとは](https://qiita.com/ymg_aq/private/df8993b297fccd1eaa41#2-autohotkey-%E3%81%A8%E3%81%AF)
3. [動作環境](https://qiita.com/ymg_aq/private/df8993b297fccd1eaa41#3-%E5%8B%95%E4%BD%9C%E7%92%B0%E5%A2%83)
4. [スクリプトの準備](https://qiita.com/ymg_aq/private/df8993b297fccd1eaa41#4-%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%81%AE%E6%BA%96%E5%82%99)
5. [使い方](https://qiita.com/ymg_aq/private/df8993b297fccd1eaa41#5-%E4%BD%BF%E3%81%84%E6%96%B9)
6. [まとめ](https://qiita.com/ymg_aq/private/df8993b297fccd1eaa41#6-%E3%81%BE%E3%81%A8%E3%82%81)

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

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

これを回避するために、例えば**iPadOSで標準のブックアプリ**を使う方法が知られています。
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">iPadのブックに論文保存してコピーすると、改行の部分が変にならずにそのまま翻訳にかけれる。これとDeepLのおかげでガチで論文読むスピード10倍になった。 <a href="https://t.co/eKekjSqbBG">pic.twitter.com/eKekjSqbBG</a></p>&mdash; taka_horibe (@taka_horibe) <a href="https://twitter.com/taka_horibe/status/1255118821322420225?ref_src=twsrc%5Etfw">April 28, 2020</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>



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

Windows環境では同様に、[**PDF.jsのデモページ**](https://mozilla.github.io/pdf.js/web/viewer.html)やChrome拡張機能の[**PDF Viewer**](https://chrome.google.com/webstore/detail/pdf-viewer/oemmndcbldboiebfnladdacbdfmadadm/related)を使えば、改行なくテキストコピーできるようです。

- [**英語論文読みを爆速にする、超便利ツール集**](https://qiita.com/bezilla/items/774d4c2c4564053f6445) (Qiita)

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

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

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

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

--

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

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

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

## 2. **AutoHotkey とは**
[**AutoHotkey**](https://www.autohotkey.com/)はWindows上で動作するスクリプト言語、およびそれを実行するユーティリティソフトウェアです。

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

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

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

2000年代前半から開発されている老舗のソフトウェアですが、現在も[GitHub](https://github.com/Lexikos/AutoHotkey_L/)上で盛んに開発が続けられています。

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

## 3. **動作環境**

- **Windows 10**
- **AutoHotkey (1.1.x)**

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

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

[**公式サイト**](https://www.autohotkey.com/)から**`Download`**→**`Download Current Version`**を選択し、ダウンロード/インストールしてください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125692/eeacf289-460d-f491-f794-bf148522f741.png" width=400>

翻訳に使うサービスは[**DeepL**](https://www.deepl.com/ja/translator)を利用していきます。
DeepLはドイツのLingueeという企業が開発している翻訳エンジン・サービスで、例えば[Google翻訳](https://translate.google.co.jp/?hl=ja)などと比べても、非常に自然で正確な翻訳文を出力してくれます。

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

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

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

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

```AutoHotkey: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の文法について詳しく知りたい方は下記を参考にしてください。

- [**Quick Reference | AutoHotkey**](https://www.autohotkey.com/docs/AutoHotkey.htm)（公式）
- [**AutoHotkey Wiki**](http://ahkwiki.net/Top)（日本語サイト）
- [**AutoHotkeyJp**](https://sites.google.com/site/autohotkeyjp/)（日本語サイト）

## 5. 使い方

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

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

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

という操作を追加すれば、コピーしておいた前半と、現在選択されている後半部分をひとつにまとめて翻訳してくれます。
![deepl.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125692/459c225b-202b-71c3-499d-66375601ec08.gif)
注意点として、DeepLのウィンドウは**PDFビューアとは別のウィンドウであること**、ウィンドウを選択した際に**原文のテキストフィールドにフォーカスされた状態**にしておく必要があります。（普通に起動するとその状態です）

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

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

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

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

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

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

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

Twitter（[@ymg_aq](https://twitter.com/ymg_aq)）もやっていますので、よければこちらもお願いいたします。