GoogleAppsScript
GoogleSpreadSheet
GoogleTranslate

Google Spreadsheet の googletranslate 関数の代わりに LanguageApp を使うワークシート関数を作ってイケてる翻訳ができるようにする

イケてない googletranslate 関数を使いたくない

Google Spreadsheet で使えるワークシート関数 googletranslate、便利といえば便利です。でも、翻訳がイケてないと思うんです。

一つの例として GPL v3 https://www.gnu.org/licenses/gpl-3.0.en.html 冒頭の下記の文を翻訳させてみることにします。

The GNU General Public License is a free, copyleft license for software and other kinds of works.

The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too.

機械翻訳と人力による翻訳を比較してみたいのですが、GPL v3 の日本語訳は下記ページにあります。ここでは次のように訳されています。
https://www.ipa.go.jp/files/000028332.html

GNU一般公衆利用許諾書は,ソフトウェアおよびその他の著作物について,フリーかつコピーレフトを主張するライセンスです。

ソフトウェアやその他の実用的な著作物を対象とするライセンスの大半は,著作物を多くの者で共有したり著作物を変更する自由を奪い去るように作られています。これに対して,GNU一般公衆利用許諾書は,プログラムの全てのバージョンを共有し変更できる自由を保証すること,すなわち,ソフトウェアがユーザ全てにとってフリーであり続けることを保証することを目的としています。私たちフリーソフトウェア財団(Free Software Foundation)は,私たちのソフトウェアの大半にGNU一般公衆利用許諾書を適用しています。他の著作物についても,作成者が私たちと同様の方法で著作物を公開するのであれば,GNU一般公衆利用許諾書を適用することが可能です。あなたのプログラムにも適用することができます。

ではこれを 次の2種類で機械翻訳して比べてみましょう。

  • translate.google.com による翻訳
  • Google Spreadsheet の googletranslate 関数による翻訳

まずは translate.google.com から。ただし原文の "By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. " の部分は "program--to" を "program to" に置換します。このような記述は機械翻訳ではうまく処理できない場合があるからです。

するとこうなりました。IPAのサイトの日本語訳に比べてイケてない部分はあれども、それなりに適切な日本語が出力されていると思います。

GNU一般公衆利用許諾契約書は、ソフトウェアやその他の種類の著作物に対する無料のコピーレフトライセンスです。

ほとんどのソフトウェアやその他の実用的な作品のライセンスは、作品の共有や変更の自由を奪うように設計されています。 対照的に、GNU一般公衆利用許諾契約書は、プログラムのすべてのバージョンを共有したり変更したりする自由を保証することを目的としています。 フリーソフトウェア財団は、当社のソフトウェアのほとんどにGNU一般公衆利用許諾契約書を使用しています。 それはその著者によってこのようにリリースされた他の作品にも適用されます。 あなたもあなたのプログラムにそれを適用することができます。
(2018/04/07時点の動作)

続いて Google Spreadsheet の googletranslate 関数で翻訳してみると、どうなるでしょうか。

GNU一般公衆利用許諾契約書は、ソフトウェアと作品の他の種類の自由、コピーレフトライセンスです。

ほとんどのソフトウェアおよびその他の実用的な作品のライセンスは、作品を共有したり変更し、あなたの自由を奪うように設計されています。これとは対照的に、GNU一般公衆利用許諾契約書を共有し、それはすべてのユーザーのためのフリーソフトウェアのまま確認するために、プログラムのすべてのバージョンを変更するには、あなたの自由を保証することを意図しています。私たちは、フリーソフトウェア財団、私たちのソフトウェアのほとんどのGNU一般公衆利用許諾契約書を使用します。それは、その著者がこの方法を発表し、他の作業にも適用されます。あなたも、あなたのプログラムに適用することができます。
(2018/04/07時点の動作)

なんか微妙ですねえ。読んでいて辛くなる部分が目立ってきました。

このように、便利なようで微妙なところが残る Google Spreadsheet の google translate 関数ではなく、translate.google.com の翻訳品質を Google Spreadsheet でも使えると便利ですよね?

Google Apps Script の LanguageApp なら同等の品質が得られます。

Google Apps Script で、こんな風に実行してみます。

var originalString = "The GNU General Public License is a free, copyleft license for software and other kinds of works." +
      "The licenses for most software and other practical works are designed to take away your freedom " +
      "to share and change the works. By contrast, the GNU General Public License is intended to guarantee " +
      "your freedom to share and change all versions of a program to make sure it remains free software " +
      "for all its users. We, the Free Software Foundation, use the GNU General Public License for most of " +
      "our software; it applies also to any other work released this way by its authors. You can apply it " +
      "to your programs, too.";


function testrun() {
  Logger.log(
    LanguageApp.translate( originalString, "en", "ja" )
  );
}

するとログにはこんな出力が出ました。

GNU一般公衆利用許諾契約書は、ソフトウェアやその他の種類の著作物に対する無料のコピーレフトライセンスです。ほとんどのソフトウェアやその他の実用的な著作物のライセンスは、作品の共有と変更の自由を奪うように設計されています。対照的に、GNU一般公衆利用許諾契約書は、プログラムのすべてのバージョンを共有したり変更したりする自由を保証して、すべてのユーザにとってフリーソフトウェアであることを保証することを意図しています。フリーソフトウェア財団は、当社のソフトウェアのほとんどにGNU一般公衆利用許諾契約書を使用しています。それはその著者によってこのようにリリースされた他の作品にも適用されます。あなたもあなたのプログラムにそれを適用することができます。

LanguageApp を使えば translate.google.com の結果と同等の内容になることが分かりました。では、これをワークシート関数として使えるようにしましょう。

ワークシート関数として使えるようにする

実は特別なことは何もなく、Google Spreadsheet のスクリプトエディタで Gooogle Apps Script の関数を書くと、それはワークシートのセルからも実行できるようになります。

したがって、こんな関数を書いておけば、

function translate(originalValue, translateFrom, translateTo) {
  return LanguageApp.translate(originalValue, translateFrom, translateTo);
}

こんな風にワークシート側から使えるわけですね。

image.png