見出し画像

英文を自動翻訳するプログラムを作る

どうも、なおです。

今回は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

(1)GoogleアカウントでGCPにログインし、[ダッシュボード]から[プロジェクトの選択] > [新しいプロジェクト]で新たにプロジェクトを作成し [開く]

画像2
画像3

(2)プロジェクトを開いたら[ライブラリ] > 「Google sheet」などで検索して[Google Sheets API]を選択

画像4

(3)[有効にする]を押す

画像5
画像6
画像7

(4)[認証情報] > [認証情報を作成] > [サービスアカウント]を選択

画像8

(5)サービスアカウントを作成したら、[サービスアカウント]の右にあるペンマークを押す

画像9
画像10

(6)[キー] > [鍵を追加] > 適当に名前を付けて[JSON]を選択

これでjsonファイルがインストールされ準備完了です。

GoogleスプレッドシートとPythonを紐付ける

次に用意したスプレッドシートとPythonファイルを紐付けします。

画像11

スプレッドシートは【エンジニアチャンネル】さんの動画のように英文を大量に書いています。(実際は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にあります🔻

https://docs.google.com/spreadsheets/d/1QkhKAKDWheXoSefLReHjqKoFk367piET2S8QHbixK8I/

IDは英数字の羅列なので分かりやすいと思います。

あとはスプレッドシート側も紐付けを行います。

画像12

インストールしたjsonファイルに[client_email]という項目があると思います。このアドレスをコピーしてスプレッドシートの[共有] > [ユーザーやグループを追加]のところにペーストして[完了]を押す。

画像13

これでスプレッドシート側の紐付けも完了!

スプレッドシートを操作する

それでは次にスプレッドシートを操作して英文を取得します。

スプレッドシートの操作は先程書いたコードの文末「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の認証キーを書きます。

画像14
画像15

認証キーは右上の名前を押した[アカウント]から[アカウント]の項目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で新たな分野に挑戦してみたい!という人の参考になれば良いなと思います。

最後までご覧頂きありがとうございました。

【宣伝】

僕はメインブログ『なおコンサルティング』も運営しており、日々パソコンやスマホなどのガジェット紹介やこのようなプログラミング講座も行っています。

興味があれば是非ご覧ください。


いいなと思ったら応援しよう!