【Google Cloud】Cloud Translation API: 通常&用語集で翻訳する方法【GCP】
Cloud Translation APIをJavaScriptで試してみた。
用語集もしっかり適用された翻訳結果になったので、使い勝手は良さそうです。
本記事では、
- まず用語集を利用しない通常の翻訳方法を説明します
- その後、用語集を使った翻訳方法を説明します
0.事前準備
■ CLIのインストール
下記リンクを参考にgcloud CLI をインストールする
■ 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で生成したランダムな文章です。
※翻訳したい言語に合わせて、text
、sourceLanguageCode
、targetLanguageCode
の値は変更してください。
// 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
を指定する。
参考:
■ 用語ファイルが登録されたかを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