今回は、Mac上でPythonを使って、機械翻訳の実装を行いたいと思います。
具体的には”googletrans"というライブラリを使って、インターネット経由でGoogle Translate Ajax APIを用いて翻訳を行います。つまりインターネットに接続されている環境が必要になります。
また、ここでは、Jupyter Labを用いてPythonのコーディングを行う方法を説明します。
この記事を読んで、理解できること、できるようになること
インターネットへの接続環境下で、Google Translate Ajax APIを使用することにより、以下の107語での翻訳(それぞれで入力、出力可能)する事ができます。
入力テキストデータ、出力テキストデータの言語の指定や、入力されたテキストデータが何語であるか、分類することもできます。(最も確からしい言語の表示とその確からしさ(Confidence)の表示。)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
('af', 'afrikaans') ('sq', 'albanian') ('am', 'amharic') ('ar', 'arabic') ('hy', 'armenian') ('az', 'azerbaijani') ('eu', 'basque') ('be', 'belarusian') ('bn', 'bengali') ('bs', 'bosnian') ('bg', 'bulgarian') ('ca', 'catalan') ('ceb', 'cebuano') ('ny', 'chichewa') ('zh-cn', 'chinese (simplified)') ('zh-tw', 'chinese (traditional)') ('co', 'corsican') ('hr', 'croatian') ('cs', 'czech') ('da', 'danish') ('nl', 'dutch') ('en', 'english') ('eo', 'esperanto') ('et', 'estonian') ('tl', 'filipino') ('fi', 'finnish') ('fr', 'french') ('fy', 'frisian') ('gl', 'galician') ('ka', 'georgian') ('de', 'german') ('el', 'greek') ('gu', 'gujarati') ('ht', 'haitian creole') ('ha', 'hausa') ('haw', 'hawaiian') ('iw', 'hebrew') ('he', 'hebrew') ('hi', 'hindi') ('hmn', 'hmong') ('hu', 'hungarian') ('is', 'icelandic') ('ig', 'igbo') ('id', 'indonesian') ('ga', 'irish') ('it', 'italian') ('ja', 'japanese') ('jw', 'javanese') ('kn', 'kannada') ('kk', 'kazakh') ('km', 'khmer') ('ko', 'korean') ('ku', 'kurdish (kurmanji)') ('ky', 'kyrgyz') ('lo', 'lao') ('la', 'latin') ('lv', 'latvian') ('lt', 'lithuanian') ('lb', 'luxembourgish') ('mk', 'macedonian') ('mg', 'malagasy') ('ms', 'malay') ('ml', 'malayalam') ('mt', 'maltese') ('mi', 'maori') ('mr', 'marathi') ('mn', 'mongolian') ('my', 'myanmar (burmese)') ('ne', 'nepali') ('no', 'norwegian') ('or', 'odia') ('ps', 'pashto') ('fa', 'persian') ('pl', 'polish') ('pt', 'portuguese') ('pa', 'punjabi') ('ro', 'romanian') ('ru', 'russian') ('sm', 'samoan') ('gd', 'scots gaelic') ('sr', 'serbian') ('st', 'sesotho') ('sn', 'shona') ('sd', 'sindhi') ('si', 'sinhala') ('sk', 'slovak') ('sl', 'slovenian') ('so', 'somali') ('es', 'spanish') ('su', 'sundanese') ('sw', 'swahili') ('sv', 'swedish') ('tg', 'tajik') ('ta', 'tamil') ('te', 'telugu') ('th', 'thai') ('tr', 'turkish') ('uk', 'ukrainian') ('ur', 'urdu') ('ug', 'uyghur') ('uz', 'uzbek') ('vi', 'vietnamese') ('cy', 'welsh') ('xh', 'xhosa') ('yi', 'yiddish') ('yo', 'yoruba') ('zu', 'zulu') |
環境
今回のぼくの環境は以下の通りです。
- OS : MacOS Mojave 10.14.6
- Python : version 3.6.5
- Hardware : MacBook Pro 2016
- IDE : Jupyter Lab
概要
googletransのインストレーションは以下の方法でできます。Macのターミナルから直接入力される場合は、1行目の初めの"!"を省略してください。
1 2 |
# install googletrans !pip install googletrans |
翻訳
それではまず、最も単純は方法での翻訳のためのコーディングの方法を説明します。
1 2 3 4 5 6 7 |
from googletrans import Translator translator = Translator() word1 = input("翻訳する言葉を入力して!") word2 = translator.translate(word1) print(word2.text) |
上記のコードを入力して、インターネットに接続した環境で実行すると翻訳すべき文章(または単語)の入力を促してきますので、入力してエンターキーを押すと、翻訳されたテキストが出力されます。(この場合、出力側の言語を指定していないので、Defaultの英語で出力されます。)
上記の英文はその上の日本語のぼくの文章を入力して、出力したものをそのまま、コピペしたものです。かなりの精度で翻訳されていると思います。
言語の指定
それでは次に、入出力のテキストの言語指定の方法を説明します。
1 2 3 4 5 6 7 |
from googletrans import Translator translator = Translator() word1 = input("翻訳する言葉を入力して!") word2 = translator.translate(word1, src="en", dest="ja") print(word2.text) |
上記のコードは、入力を英語、出力を日本語に指定したものです。ご覧の通り、5行目に変数srcに英語を意味する"en"、destに日本語を意味する"ja"を代入することによって、言語を指定しています。ちなみにsrcはsource、destはdestinationの略です。
それぞれの言語とそれを表す記号(日本語の場合の"ja")は前述の107語の表にありますので、参照して下さい。
それでは少し意地悪ですが、先ほどの英訳で出力された英文を上記の和訳のコードに代入して、出てきた和訳ともとの日本語とを比較してみましょう。
上記のピンク色の文章が元のぼくの文章で、緑色の文章がそれをgoogletransで英訳の後、和訳したものです。元のぼくの日本語よりよくできた日本語のような気がします。
入力言語の分類
最後に入力されたテキストデータが何語であるかの分類(最も確からしい言語の表示)とその確からしさの表示について説明します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
from googletrans import Translator from googletrans import LANGUAGES translator = Translator() word1 = input("調べる言葉を入力して!") detection = translator.detect(word1) if detection.lang == "zh-CN": detection.lang = "zh-cn" if detection.lang == "zh-TW": detection.lang = "zh-tw" type_of_language = LANGUAGES[detection.lang].capitalize() confidence_of_language = int(detection.confidence * 100) print("入力された言葉は{}と推測され、その確からしさは{}%です。".format(type_of_language, confidence_of_language)) |
上記のコードを簡単に説明しますと、detection = translator.detect()でインスタンスを作り、detection.langで言語のコード(日本語の場合は"ja"等)を返し、detection.confidenceでその言語であろう確からしさを0から1.0の間の数値で返します。
上のコードでは、言語のコードを前述の107語の表を使い英語の言語名に変換して、初めのアルファベットを大文字にしています。
それらを使って、コードでは、入力された言葉が何語であるかとその言葉である確からしさをパーセントで示します。
また、なぜか、中国語のコードで大文字と小文字が一致していないところがあるので、修正しています。(表ではzh-cnとなっているのに、返ってくるのはzh-CN)
まとめ
正直言って、ぼくは日本語の英訳の正確さにびっくりしました。これならば、ほんの少し手を加えれば、実務でも使える精度だと思います。
また、このライブラリでは正式な手法でGoogle先生のAPIを使っているわけではないので、安定性が求められるような使い方をされる場合は、お金を払って正式に"Googleのofficial translate API"を使ってください。また、一度に送信できるテキストデータの文字数は1万5千が上限です。また、連続してデータを送る場合は、サーバーに過度な負担をかけないように適当な感覚をあけて送信してください。
次回はこれまで説明いたしました、音声解析、音声合成、そして今回の機械翻訳を組み合わせて、音声の言葉を多言語に翻訳して音声で回答する方法の解説をしていきたいと思います。
それでは、最後までお付き合いありがとうございました。さようなら。
参考資料
本記事の作成にあたり以下の資料を参考にさせていただきました。
コメント