業務でAzure AI Translatorを利用する機会があり、Document Translationの機能を試したので内容を記載します。
Document Translationを活用することで、元のドキュメント構造とデータ形式を維持しながら、サポートされている言語でドキュメントを翻訳することができます。
Document Translationの概要
Document Translationは、Azure AI Translatorのクラウドベースの機械翻訳機能の1つです。
詳しい内容は以下のリンクを参照してください。
サポートされている翻訳プロセス
Document Translation API では2 つの翻訳プロセスがサポートされており、プロセスによってサポートされているドキュメントや実装方法が異なります。
Asynchronous batch translation(非同期バッチ翻訳)
複数のドキュメントと大きなファイルの処理がサポートされます。 バッチ翻訳プロセスでは、ソースと翻訳後のドキュメント用のストレージ コンテナーを含む Azure Blob Storage アカウントが必要です。
非同期バッチ翻訳では実行後、Azure Blob storageのコンテナに翻訳後のドキュメントが保存されます。
バッチでサポートされるドキュメント形式は以下の通りです。
ファイルの種類 | [ファイル拡張子] |
---|---|
Adobe PDF | |
コンマ区切りの値 | csv |
HTML | html、htm |
Localization Interchange File Format | xlf |
Markdown | markdown, mdown, mkdn, md, mkd, mdwn, mdtxt, mdtext, rmd |
MHTML | mthml、mht |
Microsoft Excel | xls、xlsx |
Microsoft Outlook | msg |
Microsoft PowerPoint | ppt、pptx |
Microsoft Word | doc、docx |
OpenDocument テキスト | odt |
OpenDocument プレゼンテーション | odp |
OpenDocument スプレッドシート | ods |
リッチ テキスト形式 | rtf |
Tab Separated Values/TAB | tsv/tab |
テキスト | txt |
Synchronous single file (同期単一ファイル)
HTTP 要求本文の一部として単一のドキュメントを送信し、翻訳されたドキュメントを HTTP 応答で受け取ることができます。 このファイル翻訳プロセスでは、Azure Blob Storage アカウントは必要ありません。
同期でサポートされるドキュメント形式は以下の通りです。
ファイルの種類 | [ファイル拡張子] | コンテンツ タイプ |
---|---|---|
テキスト形式 | .txt | text/plain |
タブ区切りの値 | .txv, .tab | text/tab-separated-values |
コンマ区切りの値 | .csv | text/csv |
ハイパーテキスト マークアップ言語 | .html、.htm | text/html |
MHTML | .mthml、.mht | message/rfc822、application/x-mimearchive、multipart/related |
Microsoft PowerPoint | .pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation |
Microsoft Excel | .xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet |
Microsoft Word | .docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document |
Microsoft Outlook | .msg | application/vnd.ms-outlook |
XML Localization Interchange | .xlf、.xliff | application/xliff+xml |
制限
Azure AI Translatorのすべての制限は次のリンクで確認できます。
同期・非同期(バッチ)翻訳共通の制限は以下のものがあります。
- セキュリティで保護されたドキュメント (パスワードが暗号化されているもの、内容をコピーするアクセスが制限されているものなど) の翻訳をサポートしていません
- 複数の言語で文が構成されている場合、コンテンツの文章全体が 1 つの言語で書かれているものとして動作、または対象言語に翻訳されないことがあります
非同期 (バッチ) 操作の制限
属性 | 制限 |
---|---|
ドキュメント サイズ | ≤ 40 MB |
ファイルの総数 | ≤ 1000 |
バッチ内のコンテンツ サイズの合計 | ≤ 250 MB |
バッチ内のターゲット言語の数 | ≤ 10 |
用語集ファイルのサイズ | ≤ 10 MB |
同期操作の制限
属性 | 制限 |
---|---|
ドキュメント サイズ | ≤ 10 MB |
ファイルの総数 | 1 |
ターゲット言語の合計数 | 1 |
用語集ファイルのサイズ | ≤ 1 MB |
翻訳文字数の制限 | 1 分あたり 600 万文字 (cpm) |
実装方法
具体的な実装は以下のリンクを参考にしてください。
前提条件
- アクティブな Azure アカウント
- Azure AI Translator リソース (マルチサービス Azure AI サービス リソースとは異なる)
- Standard S1 Standard サービス プラン (従量課金制)
- または C2、C3、C4、または D3 ボリューム割引プラン(Freeのプランではエラーが発生)
- (Asynchronous batch translationの場合)Azure Blob Storage アカウント
- ソースのコンテナー:翻訳対象のファイルをアップロードする場所 (必須)
- ターゲットのコンテナー:翻訳されたファイルを格納する場所 (必須)
※ サポートされている言語はドキュメント翻訳 SDK - Azure AI services | Microsoft Learnでご確認ください。
翻訳結果
まず、PowerPointで作成した資料の翻訳を実行しました。レイアウトを保ったまま翻訳することができています。記載していたリンクも文字だけが翻訳され、urlはそのまま機能しました。
※ 表示しているものは同期処理で翻訳したものですが、同期・非同期ともに処理の結果は同じでした。
続いて、同期単一ファイルの処理ではサポートされていないPDFを、非同期バッチ翻訳で処理を行いました。こちらも、構成が保たれたまま翻訳できました。文章だけではなく、表の文字も翻訳されていました。
実装例(Synchronous single file)
次のリンク先を参考に同期単一ファイルの実装を行います。
learn.microsoft.com
コンソールアプリでは以下のようなコードでDocument Translationの機能を試すことができます。
※<>の値は書き換えて下さい。
using Azure; using Azure.AI.Translation.Document; using System; using System.Threading; using System.Text; class Program { static async Task Main(string[] args) { string endpoint = "<your-custom-endpoint>"; string apiKey = "<your-key>"; SingleDocumentTranslationClient client = new SingleDocumentTranslationClient(new Uri(endpoint), new AzureKeyCredential(apiKey)); string targetLanguage = "en"; string fileName = "<source_file_name>"; string outuptFileName = "<output_file_name>"; try { string filePath = Path.Combine("<source_file_path>", fileName); string mimeType = GetMimeType(filePath); // MIMEタイプを取得 using Stream fileStream = File.OpenRead(filePath); var sourceDocument = new MultipartFormFileData(Path.GetFileName(filePath), fileStream, mimeType); DocumentTranslateContent content = new DocumentTranslateContent(sourceDocument); var response = await client.DocumentTranslateAsync(targetLanguage, content).ConfigureAwait(false); var translationResult = response.Value; // response.ValueはBinaryData型 if (translationResult != null) { // BinaryDataからストリームを取得 using var translatedStream = translationResult.ToStream(); // 必要に応じてストリームをファイルに保存 var translatedFilePath = Path.Combine("<output_file_path>", outuptFileName); // 適切なパスを指定 using (var file = File.Create(translatedFilePath)) { await translatedStream.CopyToAsync(file); // 翻訳されたファイルを保存 } Console.WriteLine($"Translation document saved: {translatedFilePath}"); } else { Console.WriteLine("No translation result returned."); } } catch (RequestFailedException exception) { Console.WriteLine($"Error Code: {exception.ErrorCode}"); Console.WriteLine($"Message: {exception.Message}"); } catch (Exception ex) { // その他の例外をキャッチする場合 Console.WriteLine($"An error occurred: {ex.Message}"); } } // 拡張子からMIMEタイプを取得するメソッド static string GetMimeType(string filePath) { string extension = Path.GetExtension(filePath).ToLowerInvariant(); return extension switch { ".txt" => "text/plain", // テキスト形式 ".txv" => "text/tab-separated-values", // タブ区切り値 ".tab" => "text/tab-separated-values", // タブ区切り値 ".csv" => "text/csv", // コンマ区切り値 ".html" => "text/html", // HTML ".htm" => "text/html", // HTML ".mthml" => "application/x-mimearchive", // MHTML ".mht" => "message/rfc822", // MHTML ".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation", // PowerPoint ".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // Excel ".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document", // Word ".msg" => "application/vnd.ms-outlook", // Outlook ".xlf" => "application/xliff+xml", // XML Localization Interchange ".xliff" => "application/xliff+xml", // XML Localization Interchange _ => "application/octet-stream" // デフォルトのMIMEタイプ }; } }
最後に
今回はAzure AI TranslatorのDocument Translationの実装方法をまとめました。
非同期バッチ翻訳ではPDFファイルなどを、光学式文字認識 (OCR)を使いドキュメント内のテキストを抽出し翻訳してくれました。
このように、Azure AI TranslatorのDocument Translationを活用することで、複雑なフォーマットに含まれるテキストを効率的に翻訳することが可能となります。