Oversæt tekst programmatisk ved hjælp af Translator Text API

Dato for oprettelse af side :

Hvad skal man forberede på forhånd

Opret en Microsoft Azure-konto på forhånd. Oprettelsesproceduren er beskrevet på denne side.

Denne gang registrerer vi os også med den gratis version, så skift den rettidigt, hvis du vil bruge den betalte version.

Opret API-ressourcer

Åbn Microsoft Azure-portalen, og klik på Ny i menuen til venstre.

「新規」をクリック

Vælg Intelligens + Analytics i den udvidede menu.

「Intelligence + analytics」を選択

Vælg Cognitive Services-API'er (prøveversion) i den udvidede menu.

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

Når oprettelsesskærmen vises, skal du indtaste et navn efter eget valg (det vil være det viste navn på instrumentbrættet) og vælge "Gratis prøveperiode" for abonnementet. Klik derefter på API-type.

API type をクリック

Vælg Translator Text API på listen over API'er.

「Translator Text API」を選択

Vælg derefter Prisniveau.

Pricing tier を選択

Da du bruger den gratis version, skal du klikke på "F0 Free" og klikke på knappen "Vælg". Den gratis version kan konvertere op til 2 millioner tegn om måneden.

「F0 Free」を選択

Hvis du registrerer en tjeneste for første gang, skal du oprette en ny ressourcegruppe. Du kan gruppere de ressourcer, du opretter, i grupper af et hvilket som helst navn.

Et sted er et sted at sætte en tjeneste. Når man hovedsageligt udvikler sig i Japan, er det mere sandsynligt, at det forbedrer ydeevnen, hvis det installeres i et Japan.

Til sidst skal du markere "Fastgør til dashboard" og klikke på knappen "Opret".

作成

Dashboardet har den ressource, du oprettede tidligere, så klik på det for at åbne det.

リソースを開く

Jeg tror, at oversigten er åben, så tjek URL'en for "Endpoint" til højre. Dette er URL'en til den API, der først skal tilgås ved godkendelse. Det ændrer sig dog sjældent, og det er beskrevet i det program, som jeg vil introducere senere, så det er godt at huske, at det er her for tiden.

Endpoint

Vælg Taster i menuen.

「Keys」を選択

Noter den KEY 1, der vises, og brug den til at godkende. Jeg tror, at det at have to nøgler sandsynligvis er en reserve. Forresten, hvis nøglen lækker udefra af en eller anden grund, kan du genskabe den med "Regenerer ..." ovenfor.

「KEY 1」をメモ

Dette afslutter opsætningen på Azure-siden.

Programmatisk adgang til API'en for at oversætte tekst

Nu er det tid til faktisk at oprette et program, så du kan oversætte teksten. Brug Visual Studio 2015 til at oprette et WPF-program og oprette en skærm, der ser sådan ud:

Indtast tekst i Fra, og angiv i Sprog, hvilket sprog du vil konvertere til hvilket sprog. Og hvis du klikker på knappen "Konverter kør", vil du kunne se den oversatte tekst i "Destination" nedenfor.

XAML (MainWindow.xaml)

Det påvirker ikke oversættelsen direkte, så kun koden er inkluderet.

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

Hent adgangstoken (MainWindow.xaml.cs)

Det grundlæggende flow for tekstoversættelse er som følger:

  1. Kast KEY 1 i API'en for at få et adgangstoken.
  2. Brug adgangstokenet til at smide teksten til oversættelsestjenesten for at få den oversatte tekst.
  3. Få adgangstokenet igen, hvis det er nødvendigt

Det kommer til.

Lad os først definere en metode til at få et adgangstoken og gøre det let at bruge. Hvis du videregiver KEY 1, der er opnået tidligere som argument, kan du få adgangstokenet. Det kan også opnås ved synkron behandling, men da C # 5.0 async / await kan bruges, lad os gøre det til en asynkron proces let.

Som et punkt skal du indstille URL-adressen til Endpoint + "/issueToken" som bekræftet i Azure og angive KEY 1, der er hentet med "Ocp-Apim-Subscription-Key" som nøglen i overskriften, der skal sendes.

Som et svar kan strengen i adgangstokenet opnås som den er, så den bruges som returværdi. Forresten er dette adgangstoken kun gyldigt i 10 minutter.

/// <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å adgang til API'en til tekstoversættelse (MainWindow.xaml.cs)

Dette er også lavet til en metode til at gøre det nemt at bruge. Argumenterne giver dig mulighed for at angive det adgangstoken, du får, og den tekst, du skal oversætte, og hvilket sprog du skal konvertere til hvilket sprog.

Bemærk, at den webadresse, du får adgang til, er forskellig fra den webadresse, hvor du hentede tokenet. Teksten og sproget, der skal oversættes, sendes som en forespørgselsstreng i URL'en, så undslippe dem ved hjælp af "Uri.EscapeDataString" på forhånd.

GET-metoden sender derefter autorisationen af overskriften med skemaet "Bærer" og tokenet i parameteren.

Da svaret er taget i XML-format, bruges XDocument til at hente den oversatte tekst indeni. Men hvis teksten indeholder XML-flugttegn, måske fordi du bruger XML, kan de forblive undsluppet. Konverter 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;
    }
  }
}

Proces til udførelse af knapper (MainWindow.xaml.cs)

Når du har implementeret to metoder, er alt hvad du skal gøre, at ringe til hver enkelt. Du kan oversætte tekst ved at indstille KEY1 og angive den indtastede værdi for hver metode. Da det er en asynkron proces, skal du tilføje asynkron til knaphåndteringsmetoden.

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

Liste over sprog, der kan oversættes

Det kan være en god idé at henvise til følgende Micorsoft-sider: Da det er en af skytjenesterne, kan den til enhver tid ændres.