英語論文の体裁を整えつつそのままdeepLを開くショートカットを作成する

# 1.はじめに
皆さん、英語読めますか？私は読めません。まあ幸い私の研究室では英語読むことよりも内容を理解してほしいという方針のもと英訳をする際にdeepL等を使用することを推奨しています。ただ、pdfの論文をコピペする時改行が入りうまく翻訳サイトに入れることができない問題があります。

この世の中には[shaper](https://dream-exp.net/shaper/) というpdf論文をコピーすると勝手に体裁を整えてワンクリックでdeepLに入れてくれるサイトがあります。とても便利でお世話になっているのですが、これを使うには

pdfの文章をコピー→shaperにペースト→shaper内のボタンをクリック

という3ステップが必要となっています。改行さえなければdeeplのアプリで文字選択をし、ctrl+cを2回押すだけで翻訳までできるのにこれはすごく手間だと感じていました。そのため、文字選択をした後に1度ショートカットキーを押すだけで翻訳結果が出るようなシステムを作成しようと考えました。

# 2.環境
Windows10
python 3.x

# 3.環境設定
Winodws10とPython3.8で今回は実行していますが、基本何でも動くと思います。

# 3.1 ライブラリのインストール
今回のプログラムで必要なライブラリをインストールします．Windowsの方はPythonの環境構築をまずしてもらい，その後これらのライブラリをインストールしてください．どちらも場合でも，コマンドプロンプトに以下のものを順々に入力するだけです．

```
$ pip3 install pyperclip
$ pip3 install pyautogui
```

# 4.プログラム
今回実装する際に、メインとなるpyプログラムとショートカットを実行するためのbatプログラムを使用します。
``` translate.py
import pyperclip
import pyautogui
import webbrowser

pyautogui.hotkey('alt', 'tab')
pyautogui.hotkey('ctrl', 'c')

text = pyperclip.paste()
textsplit = text.splitlines(True)
textreplace = []
for i in range(len(textsplit)):
    textreplace.append(textsplit[i].replace("\r\n" , "%20"))

textend = "%20".join(textreplace)


pyperclip.copy(textend)
webbrowser.open("https://www.deepl.com/translator#en/ja/"+textend)
```

``` shortcut.bat
@py.exe C:~\translate.py %*
```
ただし、C:~\translate.pyの部分は実際に作成したプログラムのパスに変更してください。

# 5.ショートカットの設定
上の2つのプログラムを作成したら、batファイルのある場所をエクスプローラーで開きます。そしてbatファイルで右クリックをし以下のようにショートカット作成をしてください。

![スクリーンショット 2022-04-25 21.15.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011513/0b8db75b-d64c-78ee-6b1e-bc5982a02cb3.png)

そして、作成したショートカットを右クリックしプロパティを開いてください。そしてショートカットキーの部分を自分の設定したいショートカットキーに設定してください。私は"Ctrl+Alt+Num 6"にしています。

![スクリーンショット 2022-04-25 21.17.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011513/66c9c398-010b-d190-f878-6486800d461c.png)

そうすることで、文字を選択した後にこのショートカットキーを押すことでdeepLのサイトが表示されると思います。

# 6.解説
プログラムの解説を軽くします。
## 6.1 deepLの仕様
前提として、deepLのURLの仕様を紹介します。
deepLでは英語から日本語に翻訳する際には以下のURLの後に英語の文章を入力することでその文章を翻訳するサイトが表示できます。
```
https://www.deepl.com/translator#en/ja/
```
また、その際に空白文字は%20で、改行は%0Aで表現できます。一例をあげると、以下のURLを開くと、その下の文字列が入力されたdeepLのサイトが表示されます。
```
https://www.deepl.com/translator#en/ja/aaaa%20dfddfdfsa%20arfa%0Aaa
```
![スクリーンショット 2022-04-25 21.24.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011513/7e5ab9fb-e0ef-bb96-fa0a-7aedafff140a.png)

## 6.2 メインプログラムの解説
主に行うことは、改行文字を空白文字に置き換えること、そしてそれらを統合しdeepLに入力することです。
``` 
pyautogui.hotkey('alt', 'tab')
pyautogui.hotkey('ctrl', 'c')

text = pyperclip.paste()
```
上の箇所で文字選択している部分をctrl+cでコピーし、その内容をtextという文字列に代入します。
```
textsplit = text.splitlines(True)
textreplace = []
```
上の箇所ではtextに格納された文章を改行されている場所で分割します。また、今後使うtextreplaceの初期化も行っています。
```
for i in range(len(textsplit)):
    texttemp = ""
    texttemp = textsplit[i].replace("\r\n", "%20")
    texttemp = texttemp.replace(" ", "%20")
    textreplace.append(texttemp)
```
上の箇所では改行文字(\r\n)と空白をを空白文字(%20)で置き換えています。ひとつ前で分割をして文字リストになっているためそれぞれについて処理を行っています。
```
textend = "%20".join(textreplace)
```
上の箇所では処理をし終えた文字リストを連結しています。ただし、リスト間の連結でも単語と単語の間に空白文字が必要なので入れています。

```
pyperclip.copy(textend)
webbrowser.open("https://www.deepl.com/translator#en/ja/"+textend)
```
最後に標準搭載されているwebbrowserを使用しdeepLサイトを開きます。ここでクリップボードに一応コピーしているのはデバッグ用なのであまり意味はないです。

## 6.3 ショートカットプログラムの解説
[このサイト](https://roche.main.jp/programming/python/implementation-of-batch-file-in-python-was-easier-than-expected-and-transcendence-convenient/)を参考にしただけなので詳しいことはわかってません。ただ、pythonの実行のショートカットをbatで作る。そしてそのbatのショートカットを作りそれをショートカットキーで呼び出すという流れです。

# 7.おわりに
とりいそぎ書いただけなのでプログラムも記事も煩雑になっていて申し訳ないです。実際の英文の例を使ってもう少し分かりやすく書けると思うので時間があるときに更新したいとは思います。