我偽中国語翻訳機作成了 をベースにしてもう少しマシな中国語翻訳機を作ってみました。
#言い訳
-自然言語処理を深掘りしたとか、変換テーブルを辞書にしたとかしてません。
→2019-06-27 一部を辞書に持ちました。
-語順は SOV のままで SVO にしてません。「行きたい」→×「去想」 〇「想去」
→2019-06-27 語順を SVO にしました。
-まだ納得はしていません。
-主語の取得方法がわからない…。
-漢字はできるだけ日本の漢字のまま。日本の漢字にないものは繁体字にしました。(偽中国語なので)
-出力結果を見ても面白くありません。まあ、コードを見て「へー、中国語ではこの漢字を当てるんだ」と思っていただければ。
-変換テーブルはかなーり基本的なことしか載せていません。キリがないので。
#改変履歴
-Amazon Web Service の Polly で中国語訳したものを日本の漢字に変換してみました。(6/29)
-語順を SVO にしました。(2019-06-27)
-翻訳ミスを直しました。(2019-06-27)
-変換テーブルの一部を辞書に持ちました。(2019-06-27)
サンプル
$ 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)))
#結果
$ 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 で中国語訳したものを日本の漢字に直してみました。
それぞれ、
我做了一個仮的中文翻訳。
我想喝酒。
我今天要離開弁公室正常的一天。
我明白了
我想明天去伊豆大島
我昨天喫了日本料理
我今天十点就完了
妳什麽時候結束?
綺麗に訳しすぎて偽中国語になってませんね。(笑)
#「堺筋線天下茶屋駅」を訳してみた。
-英語 : Sakaisuji Line Tengachaya Station
-中国語 : 堺筋线天坂屋站
一時期流行った「サカイマッスルライン」にはなっていませんね。
中国語でも「堺」のままなので、情報の欠落もありません。
「天坂屋」が怪しいですが。