Tekst programmatisch vertalen met behulp van de Translator Text API

Aanmaakdatum van pagina :

Wat van tevoren voor te bereiden

Maak vooraf een Microsoft Azure-account aan. De aanmaakprocedure wordt op deze pagina beschreven.

Ook zullen we ons deze keer registreren met de gratis versie, dus wijzig deze tijdig als u de betaalde versie wilt gebruiken.

API-bronnen maken

Open de Microsoft Azure Portal en klik op Nieuw in het linkermenu.

「新規」をクリック

Selecteer Intelligentie + Analytics in het uitgevouwen menu.

「Intelligence + analytics」を選択

Selecteer in het uitgevouwen menu Cognitive Services API's (Preview).

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

Wanneer het aanmaakscherm verschijnt, voert u een naam naar keuze in (dit is de weergavenaam op het dashboard) en selecteert u "Gratis proefversie" voor het abonnement. Klik vervolgens op API-type.

API type をクリック

Selecteer Translator Text API in de lijst met API's.

「Translator Text API」を選択

Selecteer vervolgens Prijscategorie.

Pricing tier を選択

Aangezien u de gratis versie gebruikt, klikt u op "F0 Free" en klikt u op de knop "Selecteren". De gratis versie kan tot 2 miljoen tekens per maand converteren.

「F0 Free」を選択

Als u een service voor het eerst registreert, maakt u een nieuwe resourcegroep. U kunt de resources die u maakt groeperen in groepen met een willekeurige naam.

Een locatie is een plek om een dienst neer te zetten. Wanneer het voornamelijk in Japan wordt ontwikkeld, is de kans groter dat het de prestaties verbetert als het in Japan wordt geïnstalleerd.

Vink ten slotte "Vastmaken aan dashboard" aan en klik op de knop "Maken".

作成

Het dashboard bevat de bron die u eerder hebt gemaakt, dus klik erop om deze te openen.

リソースを開く

Ik denk dat het overzicht open is, dus controleer de URL voor "Eindpunt" aan de rechterkant. Dit is de URL van de API die eerst via verificatie moet worden geopend. Het verandert echter zelden en het wordt beschreven in het programma dat ik later zal introduceren, dus het is goed om te onthouden dat het er voorlopig is.

Endpoint

Selecteer Toetsen in het menu.

「Keys」を選択

Noteer de SLEUTEL 1 die wordt weergegeven en gebruik deze om te verifiëren. Ik denk dat het hebben van twee sleutels waarschijnlijk een reserve is. Trouwens, als de sleutel om de een of andere reden naar buiten lekt, kun je deze opnieuw maken met "Regenereren ..." hierboven.

「KEY 1」をメモ

Hiermee is de installatie aan de Azure-kant voltooid.

Programmatisch toegang tot de API om tekst te vertalen

Nu is het tijd om daadwerkelijk een programma te maken zodat je de tekst kunt vertalen. Gebruik Visual Studio 2015 om een WPF-toepassing te maken en een scherm te maken dat er als volgt uitziet:

Voer tekst in Van in en voer bij Taal in welke taal u naar welke taal wilt converteren. En als u op de knop "Uitvoeren converteren" klikt, kunt u de vertaalde tekst in de onderstaande "Bestemming" zien.

XAML (MainWindow.xaml)

Het heeft geen directe invloed op de vertaling, dus alleen de code is opgenomen.

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

Toegangstoken ophalen (MainWindow.xaml.cs)

De basisstroom voor tekstvertaling is als volgt:

  1. Gooi KEY 1 in de API om een toegangstoken te krijgen.
  2. Gebruik het toegangstoken om de tekst naar de vertaalservice te gooien om de vertaalde tekst op te halen.
  3. Ontvang het toegangstoken opnieuw indien nodig

Het komt erop neer.

Laten we eerst een methode definiëren om een toegangstoken te krijgen en het gebruiksvriendelijk te maken. Als u de eerder verkregen KEY 1 als argument doorgeeft, kunt u het toegangstoken krijgen. Het kan ook worden verkregen door synchrone verwerking, maar aangezien C # 5.0 async / await kan worden gebruikt, laten we er gemakkelijk een asynchroon proces van maken.

Stel als punt de URL in op Endpoint + "/issueToken" zoals bevestigd in Azure en stel KEY 1 in die is verkregen met "Ocp-Apim-Subscription-Key" als de sleutel in de te verzenden header.

Als reactie kan de tekenreeks van het toegangstoken worden verkregen zoals deze is, dus wordt deze gebruikt als de retourwaarde. Overigens is dit toegangstoken slechts 10 minuten geldig.

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

Toegang tot de API voor tekstvertaling (MainWindow.xaml.cs)

Dit is ook een methode om het gemakkelijk te gebruiken te maken. Met de argumenten kunt u het toegangstoken opgeven dat u krijgt en de tekst die u wilt vertalen, en welke taal u naar welke taal wilt converteren.

Houd er rekening mee dat de URL die u opent, verschilt van de URL waarop u het token hebt verkregen. De te vertalen tekst en taal worden verzonden als een queryreeks in de URL, dus ontsnap ze van tevoren met behulp van "Uri.EscapeDataString".

De GET-methode verzendt vervolgens de autorisatie van de header met het schema "Bearer" en het token in de parameter.

Omdat het antwoord in XML-indeling wordt genomen, wordt XDocument gebruikt om de vertaalde tekst binnenin op te halen. Als de tekst echter XML-escapetekens bevat, bijvoorbeeld omdat u XML gebruikt, kunnen deze escaped blijven. Converteer het indien nodig.

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

Knopuitvoeringsproces (MainWindow.xaml.cs)

Zodra u twee methoden hebt geïmplementeerd, hoeft u alleen maar elke methode aan te roepen. U kunt tekst vertalen door KEY1 in te stellen en de ingevoerde waarde voor elke methode op te geven. Aangezien het een asynchroon proces is, voegt u asynchronisatie toe aan de knopverwerkingsmethode.

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

Lijst van vertaalbare talen

U kunt verwijzen naar de volgende Micorsoft pagina's: Omdat het een van de cloudservices is, kan het op elk moment worden gewijzigd.