watsonAPI LanguageTranslator で翻訳！！

# IBM のwatsonAPIで翻訳してみた。。
https://qiita.com/kg1/items/88be91c5ecde8600220e
↑の記事を見ながらwatsonAPIを使ってみようと思いましたが
APIのversionUpに伴って微修正加えないといけないみたいだったので
2018/12/03現在で動く実装して見ました。

IBM CLOUDへの登録などは上記URLを参照してください。

すごく簡単なのでさらっといきます。
まずはimport

```python
#  -*- coding: utf-8 -*-
import json
from watson_developer_cloud import LanguageTranslatorV3 as LanguageTranslator
```

次にインスタンス生成
ここに出てくるkey等はLanguage Transulator　APIのサービス資格情報で与えられた値をいれていきます。
versionのところはYYYY-MM-DDの形にしないといけません。

```python
language_translator = LanguageTranslator(
  version='2018-12-03',
  iam_apikey={個人のiam_apikey},
  url={個人のurl}
)
```

あとはこんな感じで

```python
num = 0
while (num < 1):
    text = input('和英翻訳するよ。日本語か英語を入力してね。\n')
    # 言語識別
    language = language_translator.identify(text).get_result()
    source = language['languages'][0]['language']
    if source == 'en':
        target = 'ja'
    elif source == 'ja':
        target = 'en'
    else :
        source = 'ja'
        target = 'en'
    # 翻訳
    translation = language_translator.translate(
        text=text,
        source=source,
        target=target)
    print(translation.result['translations'][0]['translation'])
    print()
    num += 1
```

##実際に動かして見た

```
####noMacBook-Air:watson-api ####$ python sample-translation.py 
和英翻訳するよ。日本語か英語を入力してね。
```

pythonのinputで入力待ちになります。

```
text = input('和英翻訳するよ。日本語か英語を入力してね。\n')
```
「こんにちは」と入力

```
####noMacBook-Air:watson-api ####$ python sample-translation.py 
和英翻訳するよ。日本語か英語を入力してね。
こんにちは
```

「Hello, there.」と返ってくる

```
####noMacBook-Air:watson-api ####$ python sample-translation.py 
和英翻訳するよ。日本語か英語を入力してね。
こんにちは
Hello, there.
```

##詳細(プログラムの作る手順)
inputで変数textに入力した「こんにちは」が入る

```
text = input('和英翻訳するよ。日本語か英語を入力してね。\n')
```

それをインスタンス生成しておいたlanguage_translatorのidentifyメソッドで入力された値が何語なのかを特定します。
例えばこんな風にして一度print文で出力

```python
    identify = language_translator.identify(text)
    print(identify)
    language = identify.get_result()
```

そしてこのprint(identify)で取れたものがこちら
・responseが返ってきています。
・一番下にはstatus_codeが200と返ってきていて
　status_codeが200ということは成功ということです。
そしてlanguagesという配下にはlanguageがキーの値とconfidenceがキーの値が並んでいます。
この値がなにを示しているかというと
想像つくでしょうが言語と入力された値がその言語である可能性が何パーセントなのか？という感じでしょうか。
この場合ja(日本語)が27%くらいの確率で、他の言語の中で一番高いことがわかります。


```
{
    "result": {
        "languages": [
            {
                "language": "ja",
                "confidence": 0.27451572806946645
            },
            {
                "language": "en",
                "confidence": 0.025823671973522
            },
            {
                "language": "zh",
                "confidence": 0.02378560160125083
            },
            {
                "language": "hi",
                "confidence": 0.01614228448309165
            }
]
    },
    "headers": {
        "_store": {
            "date": [
                "Date",
                "Wed, 05 Dec 2018 12:19:59 GMT"
            ],
            "content-type": [
                "Content-Type",
                "application/json"
            ],
            "content-length": [
                "Content-Length",
                "4405"
            ],
            "connection": [
                "Connection",
                "keep-alive"
            ],
            "x-xss-protection": [
                "X-XSS-Protection",
                "1; mode=block"
            ],
            "x-content-type-options": [
                "X-Content-Type-Options",
                "nosniff"
            ],
            "content-security-policy": [
                "Content-Security-Policy",
                "default-src 'none'"
            ],
            "cache-control": [
                "Cache-Control",
                "no-cache, no-store"
            ],
            "pragma": [
                "Pragma",
                "no-cache"
            ],
            "content-language": [
                "Content-Language",
                "en-US"
            ],
            "x-global-transaction-id": [
                "x-global-transaction-id",
                "ef7ec43dc37249c2cc9e706155cc41c7"
            ],
            "x-dp-watson-tran-id": [
                "X-DP-Watson-Tran-ID",
                "ef7ec43dc37249c2cc9e706155cc41c7"
            ]
        }
    },
    "status_code": 200
}
```

実際に値を取りたければこのままでもいいのですがget_reuslt()メソッドでresponseの必要な部分だけ取り出すことができます。

```python
language = identify.get_result()
print(language)
```

```
{'languages': [{'language': 'ja', 'confidence': 0.27451572806946645}, {'language': 'en', 'confidence': 0.025823671973522}, {'language': 'zh', 'confidence': 0.02378560160125083}]}
```

languagesの部分だけ取得できました。ただ今回はインデントが設定されていないので一行になってしまっていて見にくいですね。
これを先ほどのようにインデントを加えて見やすくするためには
[jsonの扱い方](https://qiita.com/Hyperion13fleet/items/7129623ab32bdcc6e203)
ここに書いてある
json.dumps(indent=　4)を使って見ましょう。
では

```python
language = identify.get_result()
print(json.dumps(language,indent=4))
```

こんな感じでインデントが与えられてます

```
{
    "languages": [
        {
            "language": "ja",
            "confidence": 0.18867561040711855
        },
        {
            "language": "en",
            "confidence": 0.0400647923714322
        },
        {
            "language": "zh",
            "confidence": 0.025382794302262084
        }
    ]
}

```

そしてこのデータを取り出して翻訳していきます。

```python
    source = language['languages'][0]['language']
    if source == 'en':
        target = 'ja'
    elif source == 'ja':
        target = 'en'
    else :
        source = 'ja'
        target = 'en'
    # 翻訳
    translation = language_translator.translate(
        text=text,
        source=source,
        target=target)
```
⬆︎直感的にわかると思いますが
先ほど取得したjsonの値から入力した値の可能性が高い言語を特定し
日本語の場合は英語に
英語の場合は日本語に
その他の場合は無条件で入力した値を日本語として英語に訳すように設定しています。

最後にtranslateメソッドでテキスト（入力した言葉「こんにちは」）、source(翻訳前の言語)、target（翻訳語の言語）を引数に指定してtranslation変数に結果が入ります。

その結果がこちら

```python
print(translation)
```

```
{
    "result": {
        "translations": [
            {
                "translation": "Hello, there."
            }
        ],
        "word_count": 1,
        "character_count": 5
    },
    "headers": {
        "_store": {
            "date": [
                "Date",
                "Wed, 05 Dec 2018 12:51:10 GMT"
            ],
            "content-type": [
                "Content-Type",
                "application/json;charset=UTF-8"
            ],
            "content-length": [
                "Content-Length",
                "113"
            ],
            "connection": [
                "Connection",
                "keep-alive"
            ],
            "x-xss-protection": [
                "X-XSS-Protection",
                "1; mode=block"
            ],
            "x-content-type-options": [
                "X-Content-Type-Options",
                "nosniff"
            ],
            "content-security-policy": [
                "Content-Security-Policy",
                "default-src 'none'"
            ],
            "cache-control": [
                "Cache-Control",
                "no-cache, no-store"
            ],
            "pragma": [
                "Pragma",
                "no-cache"
            ],
            "content-language": [
                "Content-Language",
                "en-US"
            ],
            "x-global-transaction-id": [
                "x-global-transaction-id",
                "15df366f9583e5c0aa25926b0e69285e"
            ],
            "x-dp-watson-tran-id": [
                "X-DP-Watson-Tran-ID",
                "15df366f9583e5c0aa25926b0e69285e"
            ]
        }
    },
    "status_code": 200
}
```

Hello,there.が返ってきてます。
それをprintして結果を返します。

```python
print(translation.result['translations'][0]['translation'])
```
```
和英翻訳するよ。日本語か英語を入力してね。
こんにちは
Hello, there.
```