Översätt text programmatiskt med Translator Text API

Datum för skapande av sida :

Vad du ska förbereda i förväg

Skapa ett Microsoft Azure-konto i förväg. Skapandeproceduren beskrivs på den här sidan.

Den här gången kommer vi också att registrera oss med gratisversionen, så ändra den i tid om du vill använda den betalda versionen.

Skapa API-resurser

Öppna Microsoft Azure-portalen och klicka på Ny på den vänstra menyn.

「新規」をクリック

Välj Intelligence + Analytics på den expanderade menyn.

「Intelligence + analytics」を選択

På den expanderade menyn väljer du Cognitive Services API:er (förhandsversion).

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

När skapandeskärmen visas anger du ett namn du väljer (det kommer att vara visningsnamnet på instrumentpanelen) och välj "Gratis provperiod" för prenumerationen. Klicka sedan på API-typ.

API type をクリック

Välj Translator Text API i listan över API:er.

「Translator Text API」を選択

Välj sedan Prisnivå.

Pricing tier を選択

Eftersom du använder gratisversionen klickar du på "F0 Free" och klickar på "Select" -knappen. Den fria versionen kan konvertera upp till 2 miljoner tecken per månad.

「F0 Free」を選択

Om du registrerar en tjänst för första gången skapar du en ny resursgrupp. Du kan gruppera de resurser som du skapar i grupper med valfritt namn.

En plats är en plats att lägga en tjänst. När man utvecklar främst i Japan är det mer troligt att det förbättrar prestanda om det installeras i ett Japan.

Slutligen markera "Fäst på instrumentpanelen" och klicka på "Skapa" -knappen.

作成

Instrumentpanelen har den resurs som du skapade tidigare, så klicka på den för att öppna den.

リソースを開く

Jag tror att översikten är öppen, så kontrollera webbadressen för "Slutpunkt" till höger. Det här är URL:en för det API som ska nås med autentisering först. Det ändras dock sällan, och det beskrivs i programmet som jag kommer att presentera senare, så det är bra att komma ihåg att det är här för tillfället.

Endpoint

Välj Tangenter på menyn.

「Keys」を選択

Anteckna KEY 1 som visas och använd den för att autentisera. Jag tror nog att det är en reserv att ha två nycklar. Förresten, om nyckeln läcker ut till utsidan av någon anledning, kan du återskapa den med "Regenerera ..." ovan.

「KEY 1」をメモ

Detta avslutar konfigurationen på Azure-sidan.

Få programmatiskt åtkomst till API:et för att översätta text

Nu är det dags att faktiskt skapa ett program så att du kan översätta texten. Använd Visual Studio 2015 för att skapa ett WPF-program och skapa en skärm som ser ut så här:

Ange text i Från och i Språk anger du vilket språk du vill konvertera till vilket språk. Och om du klickar på knappen "Konvertera körning" kommer du att kunna se den översatta texten i "Destination" nedan.

XAML (MainWindow.xaml)

Det påverkar inte direkt översättningen, så endast koden ingår.

<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>

Hämta åtkomsttoken (MainWindow.xaml.cs)

Det grundläggande flödet för textöversättning är följande:

  1. Kasta KEY 1 i API:et för att hämta en åtkomsttoken.
  2. Använd åtkomsttoken för att skicka texten till översättningstjänsten för att hämta den översatta texten.
  3. Hämta åtkomsttoken igen om det behövs

Det kommer till.

Låt oss först definiera en metod för att hämta en åtkomsttoken och göra den enkel att använda. Om du skickar KEY 1 som erhölls tidigare som argument kan du hämta åtkomsttoken. Det kan också erhållas genom synkron bearbetning, men eftersom C # 5.0 asynkron / await kan användas, låt oss göra det enkelt till en asynkron process.

Nu anger du URL:en till Endpoint + "/issueToken" som bekräftats i Azure och anger KEY 1 som hämtas med "Ocp-Apim-Subscription-Key" som nyckel i huvudet som ska skickas.

Som svar kan strängen för åtkomsttoken hämtas som den är, så den används som returvärde. Förresten är denna åtkomsttoken endast giltig i 10 minuter.

/// <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;
    }
  }
}

Få åtkomst till API:et för textöversättning (MainWindow.xaml.cs)

Detta görs också till en metod för att göra det enkelt att använda. Med argumenten kan du ange vilken åtkomsttoken du får och texten som ska översättas och vilket språk som ska konverteras till vilket språk.

Observera att URL:en som du kommer åt skiljer sig från den URL där du fick token. Texten och språket som ska översättas skickas som en frågesträng i URL:en, så undvik dem med "Uri.EscapeDataString" i förväg.

Metoden GET skickar sedan auktoriseringen av rubriken med schemat "Bearer" och token i parametern.

Eftersom svaret tas i XML-format används XDocument för att hämta den översatta texten inuti. Men om texten innehåller XML-escape-tecken, kanske för att du använder XML, kan de förbli escape-tecken. Konvertera det efter behov.

/// <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;
    }
  }
}

Process för knappkörning (MainWindow.xaml.cs)

När du har implementerat två metoder är allt du behöver göra att ringa var och en. Du kan översätta text genom att ställa in KEY1 och ange det angivna värdet för varje metod. Eftersom det är en asynkron process, lägg till asynkron i knapphanteringsmetoden.

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);
}

Lista över översättningsbara språk

Du kanske vill hänvisa till följande Micorsoft-sidor: Eftersom det är en av molntjänsterna kan den ändras när som helst.