Google翻訳の精度がますます高くなっているそうですね。
大量の英語の文章が手元にあり、それを日本語に翻訳したい場面があるかと思います。自分はこのQiitaを書くまでtranslateの綴りをtransrateだと思ってましたが、APIを叩くことでこんな英弱人間も英文をバリバリ読めるようになります。
公式に配布されているPythonのクライアントライブラリ が自分の環境でうまく動かずに困ったので、このモジュールを使わずに叩くことにしました。
Google Cloudの登録やAPIキーの取得方法などは他サイトを参考にしてください。
手元の以下の2つの環境で動くことを確認しています。
Mac OS Mojave
chardet(3.0.4)
requests(2.18.4)
urllib3(1.22)
Ubuntu 18.04
chardet (3.0.4)
requests (2.22.0)
urllib3 (1.25.7)
import requests
import json
import time
private_key = '<ここにAPI KEYを入れてください>'
def post_text(text):
url_items = 'https://www.googleapis.com/language/translate/v2'
item_data = {
'target': 'ja',
'source': 'en',
'q':text
}
response = requests.post('https://www.googleapis.com/language/translate/v2?key={}'.format(private_key), data=item_data)
# print(response.status_code)
#ステータスコード
# print(response.text)
#レスポンスを文字列で取得
return json.loads(response.text)["data"]["translations"][0]["translatedText"]
def split_and_send_to_post(text):
sen_list = text.split('.')
to_google_sen = ""
translated_text = ""
for index, sen in enumerate(sen_list[:-1]):
to_google_sen += sen + '. '
if len(to_google_sen)>1000:
#1000字を超えてたらgoogleに送信
translated_text += post_text(to_google_sen)
time.sleep(3)
to_google_sen = ""
if index == len(sen_list)-2:
#最後の文章の翻訳
translated_text += post_text(to_google_sen)
time.sleep(3)
return translated_text
if __name__ == '__main__':
original_text = "I hope this sentence is transrated."
if original_text[-1] != '.':
original_text+='.'
#.で終わっていない場合に分割処理に支障が出るので
text_translated = split_and_send_to_post(original_text)
print(text_translated)
あまり長い文章になるとGoogle側でエラーを起こしてしまうので、だいたい1000字で分割して送ってやります。(.を使わないむちゃくちゃ長い文章などはエラーになると思います。通常の用途を想定してます。)
またv3からはAPIキーでは叩けなくなっているようなので、v2を使っています。
実行結果
$ python translate.py
この文が翻訳されることを願っています。