概要
Googleが2021年5月12日、機械学習を用いて翻訳を行う「Translation API」の新機能として、PDF、Word、Excel、PowerPointのファイルを読み込み、レイアウトなどを保ちつつ内容だけを別の言語へ翻訳して出力する「Document Translation」を発表しました。
https://www.publickey1.jp/blog/21/pdfwordexcelgoogle_translation_api.html
早速触ってみましたので使い方などをご紹介したいと思います。
特に認証周りが複雑でドキュメントも少なかったのでそのあたりを解説したいと思います。
GCPでAPIを有効化
公式サイトを参考にAPIを有効化し、サービス アカウントを作成、JSON として秘密鍵をダウンロードします。
認証情報の取得
秘密鍵の情報をもとにHTTPリクエストヘッダーに付加する認証トークンを取得します。
Google Cloud SDKが利用できる環境の場合、インストール後に
gcloud auth application-default print-access-token
で取得することができます。
ただし、この方法で取得したトークンは一定時間経過後に失効してしまうのでそのたびに取得する必要があります。
サービスとしてプログラムから呼び出す場合は秘密鍵をサーバーなどに配置しておき、Google Cloudの各言語ライブラリから読み取って認証する方法が無難です。
一例としてPythonでJWTに署名してトークンを取得する方法もあるのでプログラムを記載しておきます。
※各パラメータは秘密鍵のJSONから転記
import jwt
import time
import os
iat = time.time()
exp = iat + 3600
key = 'private_key'
payload = {'iss': 'client_email',
'sub': 'client_email',
'aud': 'https://translation.googleapis.com/',
'iat': iat,
'exp': exp}
additional_headers = {'kid': 'private_key_id'}
signed_jwt = jwt.encode(payload, key, headers=additional_headers, algorithm='RS256')
print(signed_jwt)
API実行
HTTPメソッドとURL
POST https://translation.googleapis.com/v3beta1/projects/PROJECT_NUMBER_OR_ID/locations/LOCATION:translateDocument
ヘッダー
Authorization: Bearer <認証トークン>
JSON本文
{
"source_language_code": "SOURCE_LANGUAGE",
"target_language_code": "TARGET_LANGUAGE",
"document_input_config": {
"mimeType": "MIME_TYPE",
"content": "INPUT_BYTE_STREAM"
}
}
- PROJECT_NUMBER_OR_ID: Google Cloud プロジェクト番号または ID。
- LOCATION: このオペレーションを実行するリージョン。例: us-central1
- SOURCE_LANGUAGE: (省略可)入力ドキュメントの言語コード。言語コードがわかっている場合は、言語サポートに記載されている言語コードのいずれかを設定します。
- TARGET_LANGUAGE: 入力ドキュメントの翻訳先のターゲット言語。言語サポートに記載されているいずれかの言語コードを設定します。
- MIME_TYPE: ソース ドキュメントの形式(application/pdf など)。
- INPUT_BYTE_STREAM: バイト ストリームで表現した入力ドキュメントのコンテンツ。
入力ドキュメントをBase64エンコードした形式で直接指定していますが、Google Cloud Storageのパスを使用することも可能です(アウトプットも同様)
詳細は公式ドキュメントを参照してください。
おわりに
GoogleのAPIサービスは認証周りが複雑でサクッと試すのにハードルがありますが、一回わかってしまえば他のAPIサービスにも応用できるのでまずは根気強く認証周りを勉強していくと知識の幅が広がるのではないでしょうか?
ドキュメント翻訳の機能自体はDeepLやAzureなどもリリースしていますが、今後はそちらも触ってみて比較などができればと考えています。