gasで英語を日本語訳する
はじめに
こんにちは.今回は,プログラミングを勉強したての頃に作った英訳のプログラムを載せておきます.
なぜ今更そんなものを記事にするかというと,そろそろポートフォリオ的なものを作らないとな..と思ったからですね.
背景
私は,大学に入って初めて自分のパソコンを買い,初めてプログラミングを勉強しました.授業でgasを触ってこれなら簡単そうと思ったのと,英語がとにかく苦手なんです..
英語の授業でずるできないかなと思い作りました.ただ,手間がかかり過ぎてめんどくさい,一回でできるやり方もあるかも知れません.
google翻訳のAPIを利用して,Deeplとか別のものでもできそうだったが,登録不要のものがいいと思い,google翻訳を利用しました.
使い方
- 英語の教科書の写真を撮る前提でやっていきます.
- 写真を撮り,pdfにする
- pdfをgoogleドライブに送る
- pdfをドキュメントで開き,文字に起こす
- コピペで貼り付け,日本語訳を実行.
- 初期化でリセット
ネットでの翻訳との違い
ブラウザでgoogle翻訳と検索して,ドキュメント→パソコンを参照からでもできるものはできるが,写真前提なのでできないものが多い.
今回のやり方では,多少のおかしいところはあれど,簡単に修正できるレベルであった.
著作権的に載せれないが,ほぼ毎回の英語の授業でやって,問題なかったのでそこそこの精度のはず...
deeplもドキュメントから翻訳も写真からだとうまくいかないものもある.ドキュメントの翻訳を使わずに手直ししてからスプレッドシートのほうが比較的綺麗に訳せる.試してみるとそうなった.
日本語訳のプログラム
まず,どんなシートになっているかがこれ.シート名はto_jaとしている.
A2から下にコピペで英語文を載せて,日本語訳のボタンを押す.ボタンにはスクリプトを適用している.
日本語訳に割り当てているスクリプトは以下のもの
function en_to_ja() { var spreadsheet = SpreadsheetApp.openById("idを記述"); // 現在のシートを取得 var sheet = spreadsheet.getSheetByName('to_ja'); var Row = 100; for (var i = 2; i <= Row; i++) { var src = sheet.getRange("A" + i).getValue(); var dst = sheet.getRange("B" + i); var translate = LanguageApp.translate(source, "en", "ja"); dst.setValue(translate); Utilities.sleep(500); } }
2行目のopenByIdでは,どのスプレッドシートに適用するのかを記述している.適用するスプレッドシートのurlをみて,対応しているところに変えれば良い.
4行目のspreadsheet.getSheetByName('to_ja')は,適用するシートの名前にすれば良い.
また,今回は写真のように1行目には触れたくないので,2行目から100行目までで翻訳を行う.何行目までかは適当に設定すれば良い.
9行目srcで,翻訳元をA:2から順に取っていき,10行目で翻訳後を表示する範囲であるB:2からをdstに設定している.
そして,11行目でLanguageApp.translate(source, "en", "ja")を用いて英語から日本語へ変換し,それを使って12行目でdstに出力していく.
Utilities.sleep(500)は,翻訳が完了しない内に次に進むとよくなさそうなので,0.5秒遅延させている.
参考程度に日本語から英語訳をしたプログラムも載せておく.これは,シートを増やして,適当なところを直しただけ..
function ja_to_en() { var spreadsheet = SpreadsheetApp.openById("idを記述"); // 現在のシートを取得 var sheet = spreadsheet.getSheetByName('to_en'); var Row = 100; for (var i = 2; i <= Row; i++) { var source = sheet.getRange("A" + i).getValue(); var dst = sheet.getRange("B" + i); var translate = LanguageApp.translate(source, "ja", "en"); dst.setValue(translate); Utilities.sleep(500); } }
初期化プログラム
英訳したはいいけど,消すのがめんどくさい.ということで翻訳したところを削除するプログラムも追加した.
function reset1() { var spreadsheet = SpreadsheetApp.openById("16kUvqxzqoCtgDyVEWcktdCd9HnncWJNw1Itbk3eAEsU"); // 現在のシートを取得 var sheet = spreadsheet.getSheetByName('to_en'); var range = sheet.getRange("A2:B100"); range.clear(); }
シートの取得までは,基本的に英訳のプログラムとほとんど同じ.範囲も100列目までとしていたので合わせておいた.
そして,clearメソッドを利用して書いているものを削除している.
また,日本語から英語のプログラムにも適用したい場合は,4行目を変えれば良い.