ぽよメモ

レガシーシステム考古学専攻

英文を一文ずつに分割してGoogle翻訳へ投げるAlfred Workflowを作った

これまでに作ったAlfred Workflow

poyo.hatenablog.jp

poyo.hatenablog.jp

これは何?

一文ごとに分解して翻訳にかけることで見通しが良くなり,論文を読む速度が上がるWorkflow.

f:id:pudding_info:20190606222320g:plain

サンプルとして使用したのは,機械翻訳ネットワークTransformerを提案した論文*1

論文PDFの問題

全てがそうではありませんが,論文PDFはたまにそのままコピーすると「見かけ上の改行位置がそのまま反映された文章」としてコピーされてしまうことがあります*2.例えば上の例で用いた論文も,Abstractをそのままコピペすると見た目上の改行位置のままコピペされてしまいました.

f:id:pudding_info:20190606223240p:plain
そのままコピペした場合

この場合,文章の途中で改行されてしまうことが多いため,翻訳もめちゃくちゃになってしまいます.

環境

  • macOS 10.14.5
  • Alfred 4.0.1
  • Go 1.12.5

今回もGoを使っているので,使用に当たって特に準備するものはありません.今回に限っては特にGoである必要もありませんでしたが,楽だったので採用しています.
Alfredの最新版4.0系にも対応しています.3系でも動作を確認しています.

Google Translate Formatter

github.com

準備

最新版は以下からダウンロードできます.

Releases · pddg/alfred-google-translate-formatter-workflow · GitHub

AlfredとPowerpack*3が有効になっていれば,ダウンロードしたファイルを開くだけでインストールするウィンドウが出てくるはずです.
使用するためにはインストール後,ショートカットキーを設定する必要があります.

f:id:pudding_info:20190606224842p:plain

使い方

  1. 翻訳にかけたい文章を選択する
  2. ショートカットを押す
  3. ブラウザが開く

アプリケーションを問わず動作するため,ショートカットキーのコンフリクトにはお気を付けください.
これは逆に言うとブラウザ,PDFビューワ,エディタ等何にでも使えます.man コマンドのhelpでも使えます.

f:id:pudding_info:20190606225356g:plain

注意点

一文ごとに分解する機能は単なる正規表現マッチとIFの羅列

ソースコードを見れば分かりますが,単なる正規表現で一文を区切っています.さすがにピリオドの位置で分割は頭が悪すぎるので,ピリオドの次に来る文字が英語の大文字であれば改行,というようなことをしています.

Hoge fuga piyo
poyo. Poe poe.

↓

Hoge fuga piyo poyo.

Poe poe.

そのため,1.234のような浮動小数点数のピリオドは改行としては認識されません.逆に言うと,文頭が数字であれば改行としては認識されません.

Hoge fuga 1.234 piyo
poyo. 1 poe poe.

↓

Hoge fuga 1.234 piyo poyo. 1 poe poe.

ピリオドが無い場合は文字列分解できない.

例えば論文中でも,箇条書き等で文末にピリオドが無い場合,文章の終わりを認識できないため,改行されません.

Hoge fuga piyo poyo
Poe poe

↓

Hoge fuga piyo poyo Poe poe

意図的に混入されているハイフンを消してしまう

論文ではよく,改行位置に長い英単語が来た場合,その単語の途中にハイフンを挟んで改行することがあります.この場合に正しく英単語を解釈できるようにするため,改行直前のハイフンを除去して後続の単語と結合するという処理を挟んでいます.これは便利な機能ではありますが,意図的にハイフンを加えられている場合でも削除されてしまうことに注意が必要です.

Hoge fuga piyo-
poyo. Poe poe.

↓

Hoge fuga piyopoyo.

Poe poe.

たまにうまく動かない

ショートカットを押しても,うまくコピーした内容が伝播されず,エラーが出る場合があります.その場合,以下の様な通知が出ますので,選択し直す等でリトライしてみてください.

f:id:pudding_info:20190606230548p:plain

まとめ

もうかれこれ2年近く使っていて知り合いも便利に使ってくれているので,ちょっと整理してgo moduleに対応して供養しておくことにしました.
もう少し良い文章の分割アルゴリズム等があれば,教えて頂けると嬉しいです.いつでもcontributionお待ちしています.

2019/8/16 追記

知らない間にすごく伸びていて驚きました.使って頂いて色んなフィードバックを貰えると嬉しいです.はてブのコメントも読んでいるのでいくつかお答えしておきます.

  • Google Traslate API使った方が良いのでは?
    Google Translate APIの使用のためにはGoogle Cloudへの登録が必要になってきます.料金は良心的ですが,設定が煩雑になる上,(ご指摘の通り)結局どこに表示するかという問題を解決できません.Google翻訳のUIにより表示後にも微調整が可能なため,柔軟性が良くなっていると感じています.
  • ヘッダやフッタのページ数などの文字列もコピーされてしまうのを除外してくれるといい
    これは箇条書きと同じようにただのピリオドの無い文字列として認識されるため,現状対応が非常に難しいです.論文PDFから本文だけ抽出できるようなツールがあれば組み合わせて使えるかも知れませんが…
  • OmegaTっていうのがあるよ
    これは純粋に知りませんでした.が,求めているものとは少し違うなと感じています.これでやりたいのはざっくりした意味の把握なので,精読したり完全な和訳を生成することが目的ではありません.

いくらでもPull Request,Issue歓迎しておりますので機能への不満やバグ等あれば遠慮無くリポジトリの方へよろしくお願いします.

*1:Vaswani, A., Brain, G., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., … Polosukhin, I. (n.d.). Attention Is All You Need. Retrieved from https://arxiv.org/pdf/1706.03762v5.pdf

*2:これはビューワ等に依存するのかもしれません.よくわかりませんが,手元では発生する場合,発生しない場合があるようでした

*3:Alfred Workflowを使用可能にするための課金パッケージ