英文を自動翻訳するプログラムを作る
どうも、なおです。
今回はIT系の情報を発信するYouTubeチャンネル【エンジニアチャンネル】さんの動画に登場する自動翻訳プログラムを再現してみようと思います。
こちらの動画🔻
動画の内容は、「Googleスプレッドシートに並べられた英文を日本語訳し隣の列に書く」という作業を一般人が行う場合とプログラマーが行う場合を比較しています。
一般人は「英文をコピーしてGoogle翻訳にペースト、日本語訳された文章をコピーしてGoogleスプレッドシートにペースト」ということを1つ1つ行っていました。
対してプログラマーはこれらの作業をGoogle Apps Script(GAS)を用いて自動化していました。
しかし全体のソースコードや解説などはなく、動画としては「プログラミングを使えば面倒な業務を自動化できるよ」ということを伝える目的のようです。
PythonとGCPを使う!
今回はこの自動翻訳プログラムをPythonで作っていきます。
理由は僕がPythonしか使えないからです。GASはJSに似てる言語という知識しかない。
あとPythonからGoogleスプレッドシートを操作できるようにGCP(Google Cloud Platform)を使います。
肝心の翻訳方法ですが、今回はGoogle翻訳よりも正確なDeepLを使ってみようと思います。
DeepLもAPIが提供されており誰でも無料で利用できるようになっています。
GoogleスプレッドシートのAPIを取得する
まずはGCPでGoogleスプレッドシートのAPIを取得していきます。
詳しくは解説しませんが、大雑把に流れを紹介します。
(1)GoogleアカウントでGCPにログインし、[ダッシュボード]から[プロジェクトの選択] > [新しいプロジェクト]で新たにプロジェクトを作成し [開く]
(2)プロジェクトを開いたら[ライブラリ] > 「Google sheet」などで検索して[Google Sheets API]を選択
(3)[有効にする]を押す
(4)[認証情報] > [認証情報を作成] > [サービスアカウント]を選択
(5)サービスアカウントを作成したら、[サービスアカウント]の右にあるペンマークを押す
(6)[キー] > [鍵を追加] > 適当に名前を付けて[JSON]を選択
これでjsonファイルがインストールされ準備完了です。
GoogleスプレッドシートとPythonを紐付ける
次に用意したスプレッドシートとPythonファイルを紐付けします。
スプレッドシートは【エンジニアチャンネル】さんの動画のように英文を大量に書いています。(実際は42行しかない...)
ではインストールしたjsonファイルをpythonファイルと同じ階層に置き、pythonを書いていきます。
その前に必要なライブラリだけインストールしておきましょう。
pip install gspread
pip install oauth2client
この2つをインストールできたら、コードを書いていきます。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('インストールしたjsonファイル名.json', scope)
gc = gspread.authorize(credentials)
SPREADSHEET_KEY = 'スプレッドシートのID'
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1
6行目にインストールしたjsonのファイル名を書いてください。
8行目に紐付けるスプレッドシートのIDを書いてください。IDはURLにあります🔻
IDは英数字の羅列なので分かりやすいと思います。
あとはスプレッドシート側も紐付けを行います。
インストールしたjsonファイルに[client_email]という項目があると思います。このアドレスをコピーしてスプレッドシートの[共有] > [ユーザーやグループを追加]のところにペーストして[完了]を押す。
これでスプレッドシート側の紐付けも完了!
スプレッドシートを操作する
それでは次にスプレッドシートを操作して英文を取得します。
スプレッドシートの操作は先程書いたコードの文末「worksheet」を使います。
import gspread
from oauth2client.service_account import ServiceAccountCredentials
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('インストールしたjsonファイル名.json', scope)
gc = gspread.authorize(credentials)
SPREADSHEET_KEY = 'スプレッドシートのID'
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1
data = worksheet.cell(行, 列).value
worksheet.update_cell(行, 列, 入力値)
「.cell(行, 列).value」とすれば指定した行・列のセル(1マス)の値を取得することができます。
「.update_cell(行, 列, 入力値)」とすれば指定した行・列のセルに値を入力することができます。
この2つを使えば今回のプログラムを作れそうですね。
DeepLを使って日本語訳する
次に英文を日本語訳する処理を考えます。
動画ではGoogle翻訳を使っていましたが、実用性を考えてDeepLを使います。
「なぜ実用性を考えるとGoogle翻訳よりもDeepLなのか?」
DeepLはGoogle翻訳よりも翻訳が正確かつ語彙も多いのでマイナーな熟語だとしても、しっかりと翻訳してくれます!
import requests
result = requests.get(
"https://api.deepl.com/v2/translate",
params={
"auth_key": auth_key,
"target_lang": target_language,
"text": text,
},
)
translated_text = result.json()["translations"][0]["text"]
このコードはこちらのDeepL公式のサイトから引用してきました。
しかしこのままだと使えないので何点か改良します。
import requests
result = requests.post(
"https://api-free.deepl.com/v2/translate",
params={
"auth_key":"auth_key",
"source_lang":"EN"
"target_lang":"JA",
"text": text,
},
)
translated_text = result.json()["translations"][0]["text"]
まずは2行目の「requests.get」を「requests.post」に変更し、6行目の前に「source_lang」を追加します。
auth_keyの部分にはAPIの認証キーを書きます。
認証キーは右上の名前を押した[アカウント]から[アカウント]の項目1番下にあります。
これをコピーしてコードにペーストします。
完成形
少し記事が長くなりすぎているので、完成形を見せます。
import gspread
import json
from oauth2client.service_account import ServiceAccountCredentials
import requests
scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
credentials = ServiceAccountCredentials.from_json_keyfile_name('cpu-score-66067414ff60.json', scope)
gc = gspread.authorize(credentials)
SPREADSHEET_KEY = '1XCqo8I9x7dkkiNOyW3m_BYbWzI_ozlsTL2ety2uOv3M'
worksheet = gc.open_by_key(SPREADSHEET_KEY).sheet1
while True:
n = 1
try:
en = worksheet.cell(n, 1).value
result = requests.post(
"https://api-free.deepl.com/v2/translate",
params={
"auth_key":"auth_key",
"source_lang":"EN"
"target_lang":"JA",
"text": text,
},
)
ja = result.json()["translations"][0]["text"]
worksheet.update_cell(n, 2, ja)
n += 1
except:
break
while Trueで永遠に処理を繰り返します。
処理は「行:n / 列:1の値を取得する >> DeepLで翻訳する >> 翻訳された文を行:n / 列:2に入力する >> n+1する >>........」
もし「行:n / 列:1の値を取得できなかったとき(値が存在しないとき)はwhileから抜けて処理を終了する。
最後に
今回は【エンジニアチャンネル】さんの動画を再現するということで、自動翻訳プログラムを作ってみましたがどうしたか?
Python初心者やPythonで新たな分野に挑戦してみたい!という人の参考になれば良いなと思います。
最後までご覧頂きありがとうございました。
【宣伝】
僕はメインブログ『なおコンサルティング』も運営しており、日々パソコンやスマホなどのガジェット紹介やこのようなプログラミング講座も行っています。
興味があれば是非ご覧ください。