• SIS Lab
  • >
  • Blog
  • >
  • DeepL翻訳時にAutoHotKeyを使用して改行を削除する

DeepL翻訳時にAutoHotKeyを使用して改行を削除する

更新日:2021.05.24 作成日:2021.05.24

英文PDFをDeepLで翻訳するときにコピー&ペーストを利用すると、翻訳したい英文に変な改行が含まれてしまう。 そのまま翻訳すると、翻訳精度が下がってしまうため、いちいち手動で改行を削除している。

これは大変面倒くさい。

そこで、何か自動的に改行を除去する方法がないか探してみるとAutoHotKeyでやりたいことが実現できそうなので、そのときの調査結果、設定方法を下記に残しておく。

設定方法

  1. DeepLのデスクトップアプリケーションをダウンロードしてctrl + c2回で翻訳開始の設定をする
  2. AutoHotKeyで以下のスクリプトを走らせる
 ~^c::
   Input, inputText, I L1 T0.5, ^c
   IfInString, ErrorLevel, EndKey:
   {
     Clipboard := cutcrlf(Clipboard)
   }
 Return
 
 cutcrlf(str){
   str := StrReplace(str,"`r")
   str := StrReplace(str,"`n")
   return str
 }

まず、~^c::ctrl + cのホットキーを指定する。 その後のInputコマンドで、ctrl + cに続くキー入力を横取りして、inputText変数に格納する。
I L1 T0.5という引数の意味はそれぞれ次のとおり。

  • I: AutoHotKeyが生成したキー入力は無視
  • L1: 入力受付キーの長さは1文字
  • T0.5: キー入力を待つ時間は0.5秒以内

最後の^cの引数は、「ctrl+c」が入力されたらコマンドを終了して次の行に進むを意味する。

次のIfInString, ErrorLevel, EndKey:は、ErrorLevel変数にEndKey:という文字列が含まれているかという条件文である。 Inputコマンドの待ち時間(0.5秒)以内に「ctrl + c」が押されたら、ErrorLevel変数にEndKey:^{c}という値が格納される。 一方、0.5秒以内に「ctrl + c」が押されない場合はTimeoutという値が格納される。 よって、EndKey:が含まれれば「ctrl + cが2連打された」と判断できる。

IfInStringのスコープ内では、改行\r\nを削除するcutcrlfという関数を用意し、クリップボードの中身を操作する。 Clipboardはクリップボードの中身であり、cutcrlf関数を通すことで改行除去後の内容をクリップボードに戻す。

このスクリプトによって、クリップボード内の改行が除去された状態で、DeepLに渡れるため改行除去後の英文で翻訳される。 ※タイミングによってはDeepLが動作しないため、スクリプトの改良が必要である。

まとめ

日常的に利用するワークフローにおいて、ちょっとしたことを自動化するのは自分がまさに困っていることを解決できるため、すごく気持ちがよい。

今までキーボード周りのハックは、あまり試せていなかったのでAutoHotKeyを使いこなしたい。

参考