サッカーを通じて観戦力と分析力を上げていくブログ

基本的にはサッカー×データに関して試してみたことをまとめています。最近はもっぱらPythonを使った可視化中心。時々自分の好きなガジェットも。

【Python】googletransを使って日本語のデータを英語に変換(翻訳)してみる

ネットワーク分析に挑戦した際に、Google Colabだとmatplotlibの日本語表記対応が出来ず詰んでいた(元データは全て日本語だったので)時に思いついた荒技の紹介です。「元データから全部英語に変換しちゃえばいいんじゃね?」との発想でググって見るとGoogle翻訳を手軽に使えるPythonのライブラリが見つかりました。それが今回紹介する「googletrans」です。

 googletransとは

PyPI(パイピーアイ)の該当ページによると、googletransはgoogle翻訳APIを利用した翻訳と言語の検出(その単語や文章が何語なのか)を無料で行うことが出来るライブラリとのこと。

pypi.org

Googleクローラー等によるGoogle翻訳の利用をブロックしている中で、googletransの開発者達がリバースエンジニアリングによって発見した方法で実現しているそうです。そのため注意点としては、Google翻訳の制限に準拠することや(単一テキストの最大翻訳文字数は1500字など)、安定性に保証が無いこと、いつブロックされてもおかしいことが挙げられています。もし安定性が欲しいのであれば、Google Cloudの正式なAPI(有料)を使用しろとのことです。

cloud.google.com

使ってみる

早速使って見たいと思います。今回もPythonの実行環境にはGoogle Colabを使用します。まずはインストールから。

!pip install googletrans

f:id:virgilvd:20190210200350p:plain

「Successfully installed googletrans-(バージョン)」が出たら無事完了です。

翻訳してみる

早速翻訳してみます。まずは日本語から英語への変換。

from googletrans import Translator
translator = Translator()
trans_en = translator.translate('トレント・アレクサンダー・アーノルド')
print(trans_en.text)

f:id:virgilvd:20190210202347p:plain

問題なく翻訳出来ました。文章でも同様に問題なく変換できます。

f:id:virgilvd:20190210202728p:plain

続いて他の言語についてです。変換元の言語はsrc、変換先の言語はdestで指定することで自由に変換できます。ここで何も指定しないと変換元は自動で判別、変換先は英語になるようです。試しにBastian Schweinsteigerを日本語に変換してみます。

trans_de_ja = translator.translate('Bastian Schweinsteiger', src='de', dest='ja')
print(trans_de_ja.text)

f:id:virgilvd:20190210203640p:plain

問題なく変換されています。translate( )で返される値には、変換したテキスト以外にも変換元言語や変換先言語、変換先の発音などがあります。

f:id:virgilvd:20190210204200p:plain

▲サッカーを日本語にした際に、pronunciationにSakkāが返されています。

言語検出してみる

使うシーンがパッと思いつきませんが、続いては言語検出機能も試してみます。.detect( )に対象の単語/文章を入れることで言語の検出の結果とその確度を返します。

detect = translator.detect('サッカー')
print(detect)

f:id:virgilvd:20190210204929p:plain

しっかり日本語と判別してくれています。ファンダイクでも試して見ると、

f:id:virgilvd:20190210205046p:plain

確度は下がったものの、しっかりとオランダ語(nl)と検出出来ています。流石Googleですね。

二次元配列を全て変換してみる

ここからは備忘録も兼ねて、自分が二次元配列を丸っと翻訳した時のコードを記載しておきます。やりたかったのは下記のような配列の要素全てを英語にすることです。

f:id:virgilvd:20190210205455p:plain

使用したコードは以下になります。

translated_list=[]
for tag in tags_list:
    tags = [translator.translate(s).text for s in tag]
    translated_list.append(tags)

f:id:virgilvd:20190210205708p:plain

結果的には上手く変換できたのですが、途中何度かエラーが出てしまい上手くいきませんでした。「expecting value line 1 column 1 (char 0) python」と言うエラーで、どうやら内部でJsonを処理する部分が上手くいっていないような感じでした。暫くしてから再度実行すると問題なく変換できたりするので、ここが最初の安定性の部分なのかも知れません。

以上、googletransを使った変換方法でした。Google Colabでmatplotlibを日本語化できなかった際の荒業として使ってみてください。

戦術や分析に関して、こういう見方もあるよ、こうして見た方がいいよ、などご意見等ありましたら、コメントで教えていただけると幸いです。ぜひよろしくお願いいたします!