Cloud Translation API を使用する際のポイント


Google が提供している 翻訳API の Cloud Translation API を使う機会があったので、ポイントをメモしておく。

変換方法

詳細はリファレンスをみよう。
https://cloud.google.com/translate/docs/reference/rest

ざっくり書いておくと
POST https://translation.googleapis.com/language/translate/v2/
を投げる。その際に Body に次のような JSON を指定する。

{
  "q": "hello",
  "target": "ja",
  "format": "text"
}

すると次のような JSON が返ってくる

{
  "data": {
    "translations": [
      {
        "translatedText": "こんにちは", 
        "detectedSourceLanguage": "en"
      }
    ]
  }
}

GETでやるときはURLエンコードが必須

POST じゃなくて GET で流すことも可能。
その場合は、URLエンコードをしないとちゃんと変換されないので注意。

https://translation.googleapis.com/language/translate/v2/?target=en&q=Je%20suis%20ravi(e)%20de%20vous%20rencontrer
{
  "data": {
    "translations": [
      {
        "translatedText": "Nice to meet you", 
        "detectedSourceLanguage": "fr"
      }
    ]
  }
}

2種類の翻訳

デフォルトでは、ニューラル機械翻訳(NMT)モデルで翻訳される。
リクエストした言語の組み合わせが NMT モデルでサポートされていない場合、フレーズベース機械翻訳(PBMT)モデルが使用される。

明示的に指定することも可能

"model": "nmt"
"model": "base"

言語のサポート

変わるだろうからこれはリファレンスを都度見たほうが良い
https://cloud.google.com/translate/docs/languages

価格

Google Translation API の料金は使用量に基づいて月ごとに請求されます。翻訳の使用量は 100 万文字(1,000,000文字)単位で計算されます。

翻訳 20 ドル/100 万文字
言語の検出 20 ドル/100 万文字

ただし100万文字にみたない場合、20ドルかかるわけじゃなくてちゃんと使った分だけになる。

文字数

文字がマルチバイトでも 1 文字ごとに課金される。
こんにちは は 5 文字ということ。

翻訳を POST のリクエストにすれば 日本語で 30,000文字 くらいは一回のリクエストでいける。
あまりにも多いとエラーになると思う。

HTMLの場合の文字数

翻訳対象はformatで指定できるのだが、通常の texthtml がある。
html の場合、タグ等の部分も文字数としてカウントされるのでtextのほうが安くすむ。

特定の文字列を変換対象外にする

HTML を変換する場合は、<span class="notranslate">hello</span> のように囲うことで変換対象外に出来る。

割り当て

Daily Limit は 50,000,000 文字まで増やせる。
それ以上は、増加の申込みをしないといけない。

秒間制限は user だけでなく project にもあるので、システム用のサービスアカウントを作って使う、で良いと思う。

その他

FAQ があるからこれは必読。
https://cloud.google.com/translate/faq