📖

【Google Cloud】Cloud Translation API: 通常&用語集で翻訳する方法【GCP】

2024/11/03に公開

Cloud Translation APIをJavaScriptで試してみた。
用語集もしっかり適用された翻訳結果になったので、使い勝手は良さそうです。

本記事では、

  • まず用語集を利用しない通常の翻訳方法を説明します
  • その後、用語集を使った翻訳方法を説明します

0.事前準備

■ CLIのインストール

下記リンクを参考にgcloud CLI をインストールする
https://cloud.google.com/sdk/docs/install?hl=ja

■ gcloudコマンドを実行できることを確認する。

gcloud --version

もし利用できない場合はPC再起動などして、PATHが読み込まれるようにしておく。

■ ローカルでGCPの認証情報を利用できるようにする。
下記をターミナルやpowershellで実行し、ブラウザからGCPのコンソールで認証・認可を行っておく。

gcloud auth application-default login

■ Node.jsが使えることを確認する

 node --version

■ Cloud Translation APIが有効になっていることを確認する
利用するGCPのProjectを選択したうえで、「APIとサービス」から確認する。

1.Cloud Translation APIの利用方法

用語集を利用しない、通常のAPI利用方法です。

1-1.app.jsの作成

■ 空のapp.jsを作成する

■ Cloud Translation のライブラリをインストール

npm install --save @google-cloud/translate

■ app.jsの中身を作成する。
・projectId:利用したいGPCのprojectを指定する
・location:任意のlocationを指定
・sourceLanguageCode:翻訳をしたいソースとなる元の言語を指定
・targetLanguageCode:翻訳後の言語を指定

下記では、中国語から日本語への翻訳をする例です。
中国語の文章はChat GPTで生成したランダムな文章です。

※翻訳したい言語に合わせて、textsourceLanguageCodetargetLanguageCode
の値は変更してください。

// app.js
const projectId = 'translation-prj';
const location = 'us-central1';
const text = `
大家好,我叫赵若汐,来自中国北京。我今年25岁,大学毕业,专业是计算机科学。
我喜欢编程和游戏,平时也喜欢阅读和旅行。我希望能在未来的工作中不断学习和进步,结识更多的朋友。谢谢大家!
`;

// Imports the Google Cloud Translation library
const {TranslationServiceClient} = require('@google-cloud/translate');

// Instantiates a client
const translationClient = new TranslationServiceClient();

async function translateText() {
  // Construct request
  const request = {
    parent: `projects/${projectId}/locations/${location}`,
    contents: [text],
    mimeType: 'text/plain', // mime types: text/plain, text/html
    sourceLanguageCode: 'zh-CN',
    targetLanguageCode: 'ja',
  };

  // Run request
  const [response] = await translationClient.translateText(request);

  for (const translation of response.translations) {
    console.log(`Translation: ${translation.translatedText}`);
  }
}

translateText();

1-2.翻訳を実行

■プログラムを実行する
ターミナルから下記を実行し、翻訳後の文章が表示されていることを確認する

node app.js

2.用語集の利用方法

2-1.用語集のCSVを作成する

■ glossary.csvを作成する

阅读,本を読むこと
赵若汐,趙若汐
北京,ベイジン
计算机科学,情報処理学科

2-2.Google Cloudのバケットにアップロードする

■ Google Cloudのコンソールでバケットを作成する

■ 作成したglossary.csvをバケットにアップロードする

■ アップロード後、オブジェクトの詳細からgsutil URIをコピーしておく。

■ 用語集をPOST APIで登録するため、Request Bodyとなるjsonファイルを作成する。
例:post_sample_request.json

{
    "name":"projects/translation-prj/locations/us-central1/glossaries/sample-id-1",
    "languagePair": {
      "sourceLanguageCode": "zh-CN",
      "targetLanguageCode": "ja"
      },
    "inputConfig": {
      "gcsSource": {
        "inputUri": "gs://sample-tr/glossary.csv"
      }
    }
  }

・name: projects/{自分のProject名}/locations/{バケットと同じlocation}/glossaries/{任意の名前}
・sourceLanguageCode:翻訳をしたいソースとなる元の言語を指定
・targetLanguageCode:翻訳後の言語を指定
・inputUri:上の手順でコピーした用語集のgsutil URIを指定

2-3.Translation APIで用語集を登録する

■ 登録APIを実行する
下記はwindowsでのcurlコマンド実行例

curl.exe -X POST `
-H "Authorization: Bearer $(gcloud auth print-access-token)" `
-H "x-goog-user-project: translation-prj" `
-H "Content-Type: application/json; charset=utf-8" `
-d '@post_sample_request.json' `
"https://translation.googleapis.com/v3/projects/translation-prj/locations/us-central1/glossaries"

・URL:https://translation.googleapis.com/v3/projects/{Project名}/locations/{Location}/glossaries

・リクエストBodyのファイル:作成したpost_sample_request.jsonを指定する。

参考:
https://cloud.google.com/translate/docs/advanced/glossary?hl=ja#unidirectional_glossary

■ 用語ファイルが登録されたかをGET APIで確認する
下記はwindowsでのcurlコマンド実行例

curl.exe -X GET `
     -H "Authorization: Bearer $(gcloud auth print-access-token)" `
     -H "x-goog-user-project: translation-prj" `
     "https://translation.googleapis.com/v3/projects/translation-prj/locations/us-central1/glossaries"

登録した用語ID(e.g. sample-id-1)を含んだレスポンスが返ってこればOK。

2-4.用語集を使うようにプログラムで指定する

■ app.jsで用語集を利用するようにコードを追加する
追加部分は、下記の新規追加コメント箇所を参照。

// app.js
const projectId = 'translation-prj';
const location = 'us-central1';
const text = `
大家好,我叫赵若汐,来自中国北京。我今年25岁,大学毕业,专业是计算机科学。
我喜欢编程和游戏,平时也喜欢阅读和旅行。我希望能在未来的工作中不断学习和进步,结识更多的朋友。谢谢大家!
`;

// Imports the Google Cloud Translation library
const {TranslationServiceClient} = require('@google-cloud/translate');

// Instantiates a client
const translationClient = new TranslationServiceClient();

// 新規追加
const glossaryId = "sample-id-1"

async function translateText() {
  // 新規追加
  const glossaryConfig = {
    glossary: `projects/${projectId}/locations/${location}/glossaries/${glossaryId}`,
  };

  // Construct request
  const request = {
    parent: `projects/${projectId}/locations/${location}`,
    contents: [text],
    mimeType: 'text/plain', // mime types: text/plain, text/html
    sourceLanguageCode: 'zh-CN',
    targetLanguageCode: 'ja',
    // 新規追加
    glossaryConfig: glossaryConfig,

  };

  // Run request
  const [response] = await translationClient.translateText(request);

  for (const translation of response.translations) {
    console.log(`Translation: ${translation.translatedText}`);
  }

  // 新規追加 (response.glossaryTranslationsを指定する)
  for (const translation of response.glossaryTranslations) {
    console.log(`Translation with 用語集: ${translation.translatedText}`);
  }
}

translateText();

2-5.用語集を使用した翻訳を実行

■ プログラムを実行し、翻訳に用語集が利用されていることを確認する。

node app.js

  • 用語集なし
    Translation:
    皆さん、こんにちは。私の名前はZhao Ruoxi、中国北京出身です。私は 25 歳で、コンピューター サイエンスを専攻して大学を卒業しました。
    私はプログラミングとゲームが好きで、読書と旅行も好きです。今後も学び続けて仕事を進め、より多くの友達を作りたいと思っています。皆さんありがとうございました!


  • 用語集あり
    Translation with 用語集:
    皆さん、こんにちは。私の趙若汐、中国ベイジン出身です。私は 25 歳で、情報処理学科を専攻して大学を卒業しました。
    私はプログラミングとゲームが好きで、本を読むことと旅行も好きです。今後も学び続けて仕事を進め、より多くの友達を作りたいと思っています。皆さんありがとうございました!


  • 参考:利用した用語集
    glossary.csv
阅读,本を読むこと
赵若汐,趙若汐
北京,ベイジン
计算机科学,情報処理学科

Discussion