使用翻譯器文本 API 從程式翻譯文字

頁面創建日期 :

要提前準備的內容

請提前創建 Microsoft Azure 帳戶。 本將解釋創建說明。

此外,由於我們註冊了免費版本,如果您想使用付費版本,請及時更改。

為 API 建立資源

打開 Microsoft Azure 門戶螢幕,然後按下左側功能表中的“新建”。

「新規」をクリック

從展開的功能表中選擇「智慧 + 分析」。

「Intelligence + analytics」を選択

此外,從展開的功能表中選擇「認知服務APIS(預覽)」。

「Cognitive Services APIs (プレビュー)」を選択

此時將顯示「創建」螢幕,輸入任何帳戶名稱(在儀錶板中顯示為名稱),然後選擇「免費試用」以訂閱。 然後,按兩下 API 類型。

API type をクリック

從 API 清單中選擇翻譯文字 API。

「Translator Text API」を選択

然後選擇“優先順序”。

Pricing tier を選択

要使用免費版本,請按兩下“F0 免費”,然後按下“選擇”按鈕。 免費版本每月最多可轉換 200 萬個字元。

「F0 Free」を選択

如果這是您第一次註冊服務,請創建新的資源組。 您可以將資源分組到具有任何名稱的組中。

位置是放置服務的位置。 如果主要在日本部署,則在日本安裝可能會提高性能。

最後,選中「固定到儀錶板」,然後按兩下「創建」按鈕。

作成

按兩下以打開儀錶板,因為您剛剛創建了資源。

リソースを開く

我認為 Overview 處於打開狀態,因此請檢查右側的「終結點」URL。 這是首先要通過身份驗證訪問的 API 的 URL。 但是,它很少更改,並且它列在稍後介紹的程式中,因此只需記住它就在這裡。

Endpoint

從功能表中選擇「鍵」。

「Keys」を選択

記下顯示的“KEY 1”。使用此金鑰進行身份驗證。 我認為有兩個金鑰可能是備用的。 順便說一下,如果密鑰由於任何原因洩露到外部,則可以使用上面的“恢復...”重新創建它。

「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. 將金鑰 1 扔到 API 以獲取存取權杖。
  2. 使用訪問令牌將文本扔到翻譯服務以獲取翻譯的文本。
  3. 根據需要再次獲取訪問令牌

它成為。

首先,讓我們定義一個方法來獲取訪問令牌,使其更易於使用。 現在,您可以通過將剛剛獲取的 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);
}

可翻譯語言清單

請參閱以下米科索夫頁面: 因為它是雲服務之一,它可能會不時更改。