2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

配布されているモジュールを使わずにGoogle Translation APIをPythonで叩いて英文をバリバリ読む

Last updated at Posted at 2019-12-11

Google翻訳の精度がますます高くなっているそうですね。
大量の英語の文章が手元にあり、それを日本語に翻訳したい場面があるかと思います。自分はこのQiitaを書くまでtranslateの綴りをtransrateだと思ってましたが、APIを叩くことでこんな英弱人間も英文をバリバリ読めるようになります。

Cloud Translation ドキュメント

公式に配布されている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)

translate.py
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
この文が翻訳されることを願っています。

参照
Cloud Translation API

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?