我很好的偽中国語翻訳機工作了(語順多少真的版)(熱帯雨林電網服務追加版)

[我偽中国語翻訳機作成了](https://qiita.com/shoichiro-k/items/5d28be844f664100387b) をベースにしてもう少しマシな中国語翻訳機を作ってみました。

#言い訳
-自然言語処理を深掘りしたとか、<del>変換テーブルを辞書にしたとかしてません</del>。
　→2019-06-27 一部を辞書に持ちました。
-<del>語順は SOV のままで SVO にしてません。「行きたい」→×「去想」　〇「想去」</del>
　→2019-06-27 語順を SVO にしました。
 -まだ納得はしていません。
  -主語の取得方法がわからない…。
-漢字はできるだけ日本の漢字のまま。日本の漢字にないものは繁体字にしました。(偽中国語なので)
-出力結果を見ても面白くありません。まあ、コードを見て「へー、中国語ではこの漢字を当てるんだ」と思っていただければ。
-変換テーブルはかなーり基本的なことしか載せていません。キリがないので。

#改変履歴
-Amazon Web Service の Polly で中国語訳したものを日本の漢字に変換してみました。(6/29)
-語順を SVO にしました。(2019-06-27)
-翻訳ミスを直しました。(2019-06-27)
-変換テーブルの一部を辞書に持ちました。(2019-06-27)

# サンプル
```shell
$ python pseudo-chinese.py 私は昨日、日本の料理を食べました
我吃昨天、日本的料理了
```
# 実装
<details><summary>クリックで展開する</summary><div>

```python:pseudo-chinese.py
import requests
import json
import sys

BASE_URL = "https://api.ce-cotoha.com/api/dev/nlp/"
CLIENT_ID = "xxxxxxxxxx"
CLIENT_SECRET = "xxxxxxxxxxx"

# アクセストークンを取得する関数
def auth(client_id, client_secret):
    token_url = "https://api.ce-cotoha.com/v1/oauth/accesstokens"
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8"
    }
    data = {
        "grantType": "client_credentials",
        "clientId": client_id,
        "clientSecret": client_secret
    }
    r = requests.post(token_url,
                      headers=headers,
                      data=json.dumps(data))
    return r.json()["access_token"]

# 形態素解析する関数
def parse(sentence, access_token):
    base_url = BASE_URL
    headers = {
        "Content-Type": "application/json",
        "charset": "UTF-8",
        "Authorization": "Bearer {}".format(access_token)
    }
    data = {
        "sentence": sentence,
        "type": "default"
    }
    r = requests.post(base_url + "v1/parse",
                      headers=headers,
                      data=json.dumps(data))
    return r.json()

# lemma 単純翻訳用辞書
dict_lemma = { 
    '私' : '我',
    '私達': '我們',
    '君' :  '你',
    'あなた' : '你',
    'お前' : '你',
    '君達' :  '你們',
    'あなた達' : '你們',
    'お前達' : '你們',
    '彼' : '他',
    '彼女' : '他',
    '彼等' : '他們',
    '彼女達' : '他們',
    '父' : '爸爸',
    '母' : '媽媽',
}

dict_lemma2 = {
    '飲む' : '喝',
    '食べる' : '吃',
    '今日' : '今天',
    '本日' : '今天',
    '昨日' : '昨天',
    '明日' : '明天',
    '理解' : '明白',
    '午前' : '上午',
    '午後' : '下午',
    '時' : '點',
    'です' : '是',
    '言う' : '叫',
    '二回目' : '二次',
    '嬉しい' : '很開心',
    '要る' : '要',
    '要らない' : '不要',
    '有る' : '有',
    'ない' : '没有',
    '行く' : '去',
    '仕事' : '工作',
    '終わる': '了',
}

# ひらがなを削除する関数
def hira_to_blank(strj):
    return "".join(["" if ("ぁ" <= ch <= "ん") else ch for ch in strj])

if __name__ == "__main__":
    document = "私は明日、伊豆大島に行きたい"
    args = sys.argv
    if len(args) >= 2:
        document = str(args[1])

    access_token = auth(CLIENT_ID, CLIENT_SECRET)
    parse_document = parse(document, access_token)
    #print(parse_document)
    result_list = list()

    subjects = ''
    verbs = ''
    objects = ''
    suffix = ''
    isSubjectSatisfied = False

    for chunks in parse_document['result']:
        for token in chunks["tokens"]:
            # 形態素解析結果に置き換えルールを適用する
            if (token["pos"] != "引用助詞" 
            and token["pos"] != "終助詞" 
            and token["pos"] != "接続接尾辞" 
            and token["pos"] != "動詞活用語尾"):
                if token["pos"] == "動詞接尾辞" and '終止' in token["features"]:
                    if ("する" in token["lemma"]) or ("ます" in token["lemma"]):
                        prime = "也"
                    elif "たい" in token["lemma"]:
                        prime = "想"
                    elif ("しました" in token['lemma']) or ("ました" in token["lemma"]):
                        prime = '了'
                    elif "です" in token["lemma'"]:
                        priすme = '是'
                    elif token['lemma'] != 'ない':
                        prime = "了"
                    else:
                        prime = "実行"
                else:
                    prime = token["form"]

                if token['lemma'] in dict_lemma:
                    prime = dict_lemma[token['lemma']]

                if len(token["features"]) != 0:
                    if "SURU" in token["features"][0] :
                        prime = "也"
                    elif "連体" in token['features'][0]:
                        prime = "的"
                    elif "疑問符" in token["features"][0]:
                        prime = "嗎?"

                if token['lemma'] in dict_lemma2:
                    prime = dict_lemma2[token['lemma']]

                if (prime == '了') or (prime == '也') or (prime == '嗎?'):
                    suffix += prime
                elif (token["pos"] == '動詞語幹') or (token["pos"] == '動詞接尾辞'):
                    if prime == '想':
                        verbs = prime + verbs
                    else:
                        verbs += prime
                elif isSubjectSatisfied == False:
                    subjects += prime
                else:
                    objects += prime

                if (token["pos"] == '格助詞') or (token["pos"] == '連用助詞'):
                    isSubjectSatisfied = True

    print(hira_to_blank(''.join(subjects) + ''.join(verbs) + ''.join(objects) + ''.join(suffix)))
```
</div>

#結果
```shell
$ python pseudo-chinese.py 私はお酒を飲みたい
我想喝酒

$ python pseudo-chinese.py 私は本日定時退社します
我今天定時退社也

$ python pseudo-chinese.py 私は理解しました
我明白了

$ python pseudo-chinese.py 私は明日、伊豆大島に行きたい
我想去明天、伊豆大島

$ python pseudo-chinese.py 私は昨日、日本の料理を食べました
我吃昨天、日本的料理了

$ python pseudo-chinese.py 今日は10時に仕事が終わります
今天10時工作了也

$ python pseudo-chinese.py あなたは何時に終わりますか？
你何時了也嗎?
```
#Amazon Web Service の Polly で中国語訳したものを日本の漢字に直してみました。
それぞれ、

```shell
我做了一個仮的中文翻訳。

我想喝酒。

我今天要離開弁公室正常的一天。

我明白了

我想明天去伊豆大島

我昨天喫了日本料理

我今天十点就完了

妳什麽時候結束？
```
綺麗に訳しすぎて偽中国語になってませんね。(笑)

#「堺筋線天下茶屋駅」を訳してみた。
-英語 : Sakaisuji Line Tengachaya Station
-中国語 : 堺筋线天坂屋站
一時期流行った「サカイマッスルライン」にはなっていませんね。
中国語でも「堺」のままなので、情報の欠落もありません。
「天坂屋」が怪しいですが。