エクセルファイル一括英語翻訳

IT関連

こんにちは。がばりんちょです。

朝になったら熱は引いたんですが、なんか、こう、元気!ではないような感じが。こうも連続で体調が悪いと、経年劣化なのか、なにか別のものがあるのか、心配になりますなぁ。ずーっと65%という感じです。

さて、本日は「日本語エクセルファイルの一括英語翻訳」にチャレンジしました。ファイル20個あって、各ファイルには8シート、各シートにはおおよそ500行x8列くらいのデータが詰まってまして、これを英訳しましょう。というミッション。

考えたことその1:googletranslate関数を使う

これね。僕得意技なんですよ。去年習得したんですが、これを覚えたことによって、翻訳速度が10倍速になりました。こいつのいいところはお手軽なところ、あとは、翻訳前後を見比べやすいので、怪しげな翻訳があればマニュアルで直しやすいというところ。一方で各シートに=googletranslate(翻訳したいセル,”元言語”, ”翻訳先言語”)と指定するのが面倒という。

考えたことその2: Google Appsを使って一括変換

googletranslate関数を入力しようと=goくらいのところで、「これは面倒なことになる」と思い、ググってみると、ファイル単位で変換できる方法があるという。

エクセルをGoogle Spreadsheet形式に変換 > 拡張機能からGoogle Apps起動>以下のコードを貼り付ける>実行>権限について聞かれるからOK。これだけで1ファイルがっつり翻訳してくれる。

以下のスクリプトは、元シートをコピー、シート名の頭にXをつけてシート名を翻訳、シートの中身を翻訳するもの。ファイルごとに翻訳できるので、関数を各シートに貼らなくていい。一方、こいつには翻訳制限があります。閾値がどこにあるのかわからないけど、叩きすぎると1日のリクエスト数超過しましたー。って言われちゃう。ちょこちょこWaitを入れた方が長持ちするらしい。あと、実行後6分以上かかるスクリプトはTime outになる。

これで翻訳速度は100倍くらいになったと思う。ただ、原文は見ないので怪しい翻訳はそのまま。ファイルを人に渡すときは、機械翻訳だから変な翻訳があったら確認してね。と伝えて置くほうが無難かもしれない。

えー。3ファイル/20ファイル完了したところで無事制限に…ひっかかりまして。

function copyAndTranslateSheets() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheets = ss.getSheets();
var targetLang = "en"; // 翻訳先の言語(英語)

sheets.forEach(sheet => {
var sheetName = sheet.getName();
var translatedName = translateText(sheetName, targetLang); // シート名を翻訳
var newSheetName = "X" + translatedName; // 接頭辞「X」をつける

var copiedSheet = sheet.copyTo(ss).setName(newSheetName);
translateSheetContent(copiedSheet, targetLang); // シート内容を翻訳
});

Logger.log("すべてのシートがコピーされ、翻訳されました!");
}

function translateSheetContent(sheet, targetLang) {
var range = sheet.getDataRange();
var values = range.getValues();

for (var i = 0; i < values.length; i++) {
for (var j = 0; j < values[i].length; j++) {
if (values[i][j]) {
values[i][j] = translateText(values[i][j], targetLang); // セルの内容を翻訳
}
}
}
range.setValues(values);
}

function translateText(text, targetLang) {
try {
return LanguageApp.translate(text, "ja", targetLang);
} catch (e) {
Logger.log("翻訳エラー: " + text);
return text; // 翻訳できなかった場合はそのまま
}
}

考えたことAPその3: Google Cloud Translation APIを使う

1日3ファイルずつ翻訳すると7日かかってしまう…ということで、多少お金がかかってもいいのでなんとかならんかということで、次に検討したのがこれ。50万字/月まで無料、その後100万字まで$20らしい。1ファイルの文字数がおおよそ3万字程度、残り17ファイルx3万字=51万字。ギリギリ無料に収まらないけど、かかっても$20、払えない額でもなさそう…ということでチャレンジ。

Google Cloud に登録して、半日いじってみたけど、残念ながら「Method doesn’t allow unregistered callers (callers without established identity). Please use API Key or other form of API consumer identity to call this API」というエラーが出てしまい、これが解決できず。

API側で正しくユーザを認識していないのか、ユーザ側で正しくAPIを叩けていないのか。APIキーは正しく設定できてるみたいなのに…なんで動かないんだ?APIにちゃんとアクセスできるようになると、Google Slideも自動翻訳できるようになるっぽいので、何としても習得したい。誰かコーチしてくんないか。薄謝と拍手を進呈したい。

ちなみにこれができると翻訳速度は200倍位になると思う。翻訳の文言もこちらの方がキレイだとWebで発信している方がいた。Microsoft Translator APIも気になるけど、こちらはAzureとやらを契約しないと行けないらしい。馴染が全くないんだよなぁ。

今日の学び

Google Translate AIP (無料)はGoogle Appsから簡単に使える

それでは。

みかん…である

コメント

タイトルとURLをコピーしました