Python 3行でGoogle翻訳

これをマスター

マスター Google翻訳ライブラリで英語のExcelを翻訳

テーマ

海外のあこがれのカフェのメニューを見つけました
さくっと日本語に翻訳してみよう
from googletrans import Translator
trans=Translator()
translated=trans.translate("Our blend of hand picked organic beans that have been naturally decaffinated.", src='en',dest='ja')

たった3行

訳してみたのは1文だけですが
これだけでGoogle Translatorを使って日本語に訳す事ができます

でも1文だけだったらGoogleのサイトでやった方が早くねえ??
て気もしますが、もし数百行あるExcelだったらそれも大変ですよね

この方法は複数行を訳すのも形は同じです
(詳しくは後ほど実践で)

それでは結果を print(translated.text) で出力してみましょう

“Our blend of hand picked organic beans that have been naturally decaffinated.”の元の文が
“自然にカフェインを抜いた手摘みの有機豆のブレンド”
と訳されました

さすがGoogle翻訳
なかなかの精度ですね

詳しく

それでは詳しく見ていきましょう

ライブラリのインストール

googletransというライブラリを使っていきますので
まずインストールは
pip install googletrans
これで完了です

PIPの使い方は ご覧になってみてください

ライブラリ読み込み

from googletrans import Translator
import pandas as pd
trans=Translator()

GoogleTranslatorライブラリを読みこんで
transというインスタンスを作ります

translated=trans.translate("Our blend of hand picked organic beans that have been naturally decaffinated.", src='en',dest='ja')

実践コーナーに出てくるKaggleのデータの中から
「Our blend of hand picked organic beans that have been naturally decaffinated」という文を日本語にしています

GoogleTranslatorにはtranslate機能があるので英語文章を渡します

パラメタはそれぞれ、srcが元の言語、destが目的の言語
ここでは英語のenと日本語のjaを指定してtranslatedに返します

translateはlistを返してきます
.origとすると翻訳前の文章
.textとすると翻訳された文章がとれます

実践

今度は複数の文章を一気に翻訳してみましょう
Kaggleで素敵なコーヒーショップのサンプルデータが提供されています
(このサイトでもサンプルとして使わせて頂いていますが)
データが英語なので日本語に翻訳してみましょう

from googletrans import Translator
import pandas as pd
trans=Translator()

# Read product.csv file to DataFrame
product=pd.read_csv('product.csv',sep=",",header=0)

# Translate description column into Japanese and merge to original DataFrame
translated=trans.translate(product.product_description.to_list(), src='en',dest='ja')
product['product_description_ja']=list(after.text for after in translated)

# Export to XLSX
product.to_excel("productJa.xlsx")

一つの文章を翻訳するだけでなく、csvのデータを読みこんで
翻訳したデータを元のデータにくっつけてExcel形式で保存しています

product.csvの中身はこんな感じです

product_id,product_group,product_category,product_type,product,product_description,unit_of_measure,current_wholesale_price,current_retail_price,tax_exempt_yn,promo_yn,new_product_yn
1,Whole Bean/Teas,Coffee beans,Organic Beans,Brazilian - Organic,It's like Carnival in a cup. Clean and smooth.,12 oz,14.4,$18.00 ,Y,N,N
2,Whole Bean/Teas,Coffee beans,House blend Beans,Our Old Time Diner Blend,Out packed blend of beans that is reminiscent of the cup of coffee you used to get at a diner. ,12 oz,14.4,$18.00 ,Y,N,N
3,Whole Bean/Teas,Coffee beans,Espresso Beans,Espresso Roast,Our house blend for a good espresso shot.,1 lb,11.8,$14.75 ,Y,N,N
4,Whole Bean/Teas,Coffee beans,Espresso Beans,Primo Espresso Roast,Our primium single source of hand roasted beans.,1 lb,16.36,$20.45 ,Y,N,N
5,Whole Bean/Teas,Coffee beans,Gourmet Beans,Columbian Medium Roast,A smooth cup of coffee any time of day. ,1 lb,12,$15.00 ,Y,N,N

それでは読み込みから見ていきましょう

# Read product.csv file to DataFrame
product=pd.read_csv('product.csv',sep=",",header=0)

Pandasで、product.csvファイルを読み込みます
このデータは最初の行がヘッダーなので、header=0 としてヘッダーの位置が最初の行と指定します
ヘッダーが無い場合は、header=noneとしてあげましょう

詳しくは
http://numninja.com/jp/pythonjp/pandas-read/
あわせてご覧ください

translated=trans.translate(product.product_description.to_list(), src='en',dest='ja')
product['product_description_ja']=list(after.text for after in translated)
 

product.product_description.to_list()
読みこんだproductのデータフレーム内で商品説明カラム(product_description)をリストにしてGoogle Translatorに渡します
Google Translatorライブラリが受け取るのは文字列かリストなので
to_list()で変換してから渡します

つづいて
product[‘product_description_ja’]=list(after.text for after in translated)

まずは左辺から、product[‘product_description_ja’] で新しくproduct_description_ja と言うカラムを作成して
つづいて右辺、list(after.text for after in translated) 少し簡略していますが

for after in translated
    list(after.text)

のような表現を一文で書いています
最初の例では、翻訳は一文だけでしたが
ここでは複数の文を処理するので for ループで繰り返します
基本は最初の例と同じです

# Export to XLSX
product.to_excel("productJa.xlsx")

最後は、Pandasの機能を使ってproduct.xlsxで保存します

では、いくつか結果を見てみましょう

product_descriptionproduct_description_ja
It’s like Carnival in a cup. Clean and smooth.カップに入ったカーニバルのようなものです。清潔で滑らか。
Out packed blend of beans that is reminiscent of the cup of coffee you used to get at a diner. 食堂で買ったコーヒーを連想させる、豆のパックブレンド。
Our house blend for a good espresso shot.私たちの家は良いエスプレッソショットのためにブレンドします。
Our primium single source of hand roasted beans.手で焼いた豆の私たちのプリミウム単一ソース。
A smooth cup of coffee any time of day. 一日中いつでもスムーズなコーヒー。

元データにスペルミスがあったりするので若干の違和感はありますが
それほど遠くはない結果ですね
(数年前のGoogle Translatorからの進歩は目覚ましい)

100行弱のデータですが、処理時間は20秒ほど
手で訳してたら結構かかってたかもですね

あわせてご覧ください