使用翻譯器文本 API 從程式翻譯文字
要提前準備的內容
請提前創建 Microsoft Azure 帳戶。 本頁將解釋創建說明。
此外,由於我們註冊了免費版本,如果您想使用付費版本,請及時更改。
為 API 建立資源
打開 Microsoft Azure 門戶螢幕,然後按下左側功能表中的“新建”。
從展開的功能表中選擇「智慧 + 分析」。
此外,從展開的功能表中選擇「認知服務APIS(預覽)」。
此時將顯示「創建」螢幕,輸入任何帳戶名稱(在儀錶板中顯示為名稱),然後選擇「免費試用」以訂閱。 然後,按兩下 API 類型。
從 API 清單中選擇翻譯文字 API。
然後選擇“優先順序”。
要使用免費版本,請按兩下“F0 免費”,然後按下“選擇”按鈕。 免費版本每月最多可轉換 200 萬個字元。
如果這是您第一次註冊服務,請創建新的資源組。 您可以將資源分組到具有任何名稱的組中。
位置是放置服務的位置。 如果主要在日本部署,則在日本安裝可能會提高性能。
最後,選中「固定到儀錶板」,然後按兩下「創建」按鈕。
按兩下以打開儀錶板,因為您剛剛創建了資源。
我認為 Overview 處於打開狀態,因此請檢查右側的「終結點」URL。 這是首先要通過身份驗證訪問的 API 的 URL。 但是,它很少更改,並且它列在稍後介紹的程式中,因此只需記住它就在這裡。
從功能表中選擇「鍵」。
記下顯示的“KEY 1”。使用此金鑰進行身份驗證。 我認為有兩個金鑰可能是備用的。 順便說一下,如果密鑰由於任何原因洩露到外部,則可以使用上面的“恢復...”重新創建它。
這是 Azure 端設置的結束。
以程式設計形式訪問 API 以翻譯文字
現在,您可以實際編寫程式來翻譯文本。 使用 Visual Studio 2015 建立 WPF 應用程式,並創建類似於以下內容的螢幕:
在「源」中輸入文字,在「語言」中鍵入要從何種語言轉換為哪些語言。 然後按下「運行轉換」按鈕,您將看到翻譯的文字到下面的“目標”。
XAML (MainWindow.xaml)
它對翻譯沒有直接影響,因此請只提供代碼。
<Window x:Class="AzureTranslatorTextApi.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:AzureTranslatorTextApi"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Label x:Name="label" Content="変換元" HorizontalAlignment="Left" Grid.Row="0"/>
<TextBox x:Name="textBoxInput" Margin="4" Text="ここに変換するテキストを入力します。" Grid.Row="1" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto"/>
<Label x:Name="labelLang" Content="言語" HorizontalAlignment="Left" Grid.Row="2"/>
<Label x:Name="labelLangFrom" Content="from" HorizontalAlignment="Left" Grid.Row="2" Margin="56,0,0,0"/>
<TextBox x:Name="textBoxLangFrom" Margin="96,4,0,4" HorizontalAlignment="Left" Text="ja" Grid.Row="2" Width="50"/>
<Label x:Name="labelLangTo" Content="to" HorizontalAlignment="Left" Grid.Row="2" Margin="164,0,0,0"/>
<TextBox x:Name="textBoxLangTo" Margin="190,4,0,4" HorizontalAlignment="Left" Text="en" Grid.Row="2" Width="50" />
<Button x:Name="button" Content="変換実行" Margin="24,4" Height="24" Grid.Row="3" Click="button_Click"/>
<Label x:Name="label_Copy" Content="変換先" HorizontalAlignment="Left" Grid.Row="4"/>
<TextBox x:Name="textBoxOutput" Margin="4" Grid.Row="5" AcceptsReturn="True" AcceptsTab="True" VerticalScrollBarVisibility="Auto" IsReadOnly="True" Background="#FFE8E8E8" HorizontalScrollBarVisibility="Auto"/>
</Grid>
</Window>
取得存取權杖(主視窗.xaml.cs)
作為文本翻譯的基本流程
- 將金鑰 1 扔到 API 以獲取存取權杖。
- 使用訪問令牌將文本扔到翻譯服務以獲取翻譯的文本。
- 根據需要再次獲取訪問令牌
它成為。
首先,讓我們定義一個方法來獲取訪問令牌,使其更易於使用。 現在,您可以通過將剛剛獲取的 KEY 1 傳遞給參數來獲取訪問權杖。 同步過程也可以檢索,但從 C# 5.0 開始,可以使用異步/await,因此讓我們輕鬆異步。
將 URL 設置為 Azure 確認的終結點 +“/問題工具”,並將 KEY 1 設置為要發送的標頭的密鑰,並將“Ocp-Apim-訂閱密鑰”設置為鍵。
作為回應,您可以按原樣獲取訪問令牌字串,並將其作為返回值。 順便說一下,此訪問令牌僅在10分鐘內有效。
<summary>
非同期でアクセストークンを取得します。
</summary>
<param name="subscriptionKey">認証に必要なキー文字列。</param>
<returns>取得したアクセストークン。</returns>
private async Task<string> GetAccessTokenAsync(string subscriptionKey)
{
using (var client = new HttpClient())
using (var request = new HttpRequestMessage())
{
request.Method = HttpMethod.Post;
request.RequestUri = new Uri("https://api.cognitive.microsoft.com/sts/v1.0/issueToken");
request.Content = new StringContent(string.Empty);
request.Headers.TryAddWithoutValidation("Ocp-Apim-Subscription-Key", subscriptionKey);
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var token = await response.Content.ReadAsStringAsync();
Trace.WriteLine($"token={token}");
return token;
}
}
}
存取 API 進行文字翻譯(主視窗.xaml.cs)
這也是一個方法,易於使用。 允許您指定從哪個語言轉換為哪些語言,以及為參數獲取的訪問令牌和要翻譯的文本。
請注意,您訪問的 URL 與獲取令牌的 URL 不同。 由於要翻譯的文本和語言將作為URL的查詢字串發送,因此請提前使用Uri.EscapeDataString 轉義它。
然後,使用 GET 方法將架構“ Bearer” 和參數的權杖設定為標頭授權併發送。
由於回應以 XML 格式檢索,因此 XDocument 用於檢索翻譯後的文字。 但是,如果文本包含 XML 轉義字元,可能是因為它使用 XML,但它可能保持轉義狀態。 根據需要進行轉換。
<summary>
テキストを翻訳します。
</summary>
<param name="token">API のアクセスに必要なトークン。</param>
<param name="text">翻訳するテキスト、</param>
<param name="fromLang">翻訳元の言語。</param>
<param name="toLang">翻訳先の言語。</param>
<returns>翻訳されたテキスト。</returns>
private async Task<string> TranslateText(string token, string text, string fromLang, string toLang)
{
using (var client = new HttpClient())
using (var request = new HttpRequestMessage())
{
// URL につけて送信するのでエンコードする
var escapeText = Uri.EscapeDataString(text);
Trace.WriteLine($"escapeText={escapeText}");
var uriStr = "http://api.microsofttranslator.com/V2/Http.svc/Translate?"
+ $"text={escapeText}&from={fromLang}&to={toLang}";
request.Method = HttpMethod.Get;
request.RequestUri = new Uri(uriStr);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var resultText = await response.Content.ReadAsStringAsync();
// <string>XXXXXX</string> 形式で取得されるので XDocument で操作する
XDocument xdoc = XDocument.Parse(resultText);
Trace.WriteLine($"xdoc={xdoc.ToString()}");
// XML エスケープ対象文字が正しく変換されない場合があるので
// 必要があれば対処すること
return xdoc.Descendants().First().Value;
}
}
}
按鈕執行處理 (MainWindow.xaml.cs)
實現兩個方法后,只需調用每個方法即可。 您可以通過為每個方法指定 KEY1 和輸入的值來翻譯文字。 由於它是異步的,因此請為按鈕處理方法添加異步。
private async void button_Click(object sender, RoutedEventArgs e)
{
// ここに認証キー(KEY1)を入力してください
string subscriptionKey = "XXXXXXXXX";
// アクセストークンを取得します。有効時間は10分程度です。(おそらく)
var token = await GetAccessTokenAsync(subscriptionKey);
// テキストを翻訳し表示します
textBoxOutput.Text = await TranslateText(token, textBoxInput.Text, textBoxLangFrom.Text, textBoxLangTo.Text);
}
可翻譯語言清單
請參閱以下米科索夫頁面: 因為它是雲服務之一,它可能會不時更改。