[Boto3 Adv-Cal DAY9]Translateで、元フレーズの言語を自動推測させた上で日本語へ翻訳してみた

boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。

boto3のドキュメントを通して、サービス別にどういった事が出来るのかを理解したり、管理コンソールを通さずにTerminalだけで完結できるように検証していくことが目的になります。

9日目はTranslateで英和翻訳してみました。

目次

boto3を通してTranslateで出来ること

ドキュメントは下記リンク先です。

ざっくりと以下のことができます。

  • カスタム辞書の操作(取り込み・削除)
  • 翻訳の実行

今回の操作

指定したフレーズの言語自動推測での翻訳です。

% python main.py
Input Profile name [default]>>
Input translate text >> test
{'ResponseMetadata': {'HTTPHeaders': {'connection': 'keep-alive',
                                      'content-length': '100',
                                      'content-type': 'application/x-amz-json-1.1',
                                      'date': 'Wed, 05 Dec 2018 09:34:52 GMT',
                                      'x-amzn-requestid': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'},
                      'HTTPStatusCode': 200,
                      'RequestId': 'XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX',
                      'RetryAttempts': 0},
 'SourceLanguageCode': 'en',
 'TargetLanguageCode': 'ja',
 'TranslatedText': 'テストを実行します'}

main.py

import boto3
from pprint import pprint

class TranslateWizard:
    _client_name = 'translate'
    _session = None

    def __init__(self, profile_name):
        self._session = boto3.Session(profile_name=profile_name, region_name='us-east-1')

    @property
    def session(self):
        return self._session

    def get_client(self, client_name=None):
        if not client_name:
            client_name = self._client_name
        return self.session.client(client_name)

    @property
    def client_name(self):
        return self._client_name

    def translate(self, text):
        params = {
            'Text': text,
            'SourceLanguageCode': 'auto',
            'TargetLanguageCode': 'ja'
        }
        return self.get_client().translate_text(**params)

    def prompt_translate_text(self):
        value = None
        while True:
            value = input("\n Input translate text >> ")
            if value and len(value) != 0:
                break
        return value

    @staticmethod
    def prompt():
        default_profile_name = 'default'
        profile_name = input('Input Profile name [{}]>> '.format(default_profile_name))
        if len(profile_name) == 0:
            profile_name = default_profile_name
        wizard = TranslateWizard(profile_name)

        text = wizard.prompt_translate_text()
        result = wizard.translate(text)
        pprint(result)

if __name__ == '__main__':
    TranslateWizard.prompt()

対象リージョン

ea-northeast-1で行うとEndpointでエラーが発生したため、region_nameをus-east-1にて上書き指定しました。

翻訳言語

翻訳元言語についてはautoを指定することで自動解析されます。指定する翻訳コードについては、boto3のドキュメントに掲載されています。

翻訳サポートされている組み合わせについては、以下のドキュメントを参照してください。

まとめ

複数の言語間での自然な翻訳が可能なため、訳に困った時にコストが問題なければ試してみるのもありだと思いました。

また、個人的に丁寧な翻訳を行ってくれた感じもあったため、言い回しに困った際にも有効かもしれません。