Traduire du texte par programme à l’aide de l’API Translator Text

Date de création de la page :

Ce qu’il faut préparer à l’avance

Créez un compte Microsoft Azure au préalable. La procédure de création est décrite sur cette page.

De plus, cette fois, nous nous inscrirons à la version gratuite, veuillez donc la modifier en temps opportun si vous souhaitez utiliser la version payante.

Créer des ressources API

Ouvrez le portail Microsoft Azure et cliquez sur Nouveau dans le menu de gauche.

「新規」をクリック

Sélectionnez Intelligence + Analytics dans le menu développé.

「Intelligence + analytics」を選択

Dans le menu développé, sélectionnez API Cognitive Services (version préliminaire).

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

Lorsque l’écran de création apparaît, entrez un nom de votre choix (ce sera le nom d’affichage sur le tableau de bord) et sélectionnez « Essai gratuit » pour l’abonnement. Cliquez ensuite sur Type d’API.

API type をクリック

Sélectionnez Translator Text API dans la liste des API.

「Translator Text API」を選択

Sélectionnez ensuite Niveau de tarification.

Pricing tier を選択

Puisque vous utilisez la version gratuite, cliquez sur « F0 Gratuit » et cliquez sur le bouton « Sélectionner ». La version gratuite peut convertir jusqu’à 2 millions de caractères par mois.

「F0 Free」を選択

Si vous inscrivez un service pour la première fois, créez un nouveau groupe de ressources. Vous pouvez regrouper les ressources que vous créez en groupes de n’importe quel nom.

Un emplacement est un endroit pour mettre un service. Lors du développement principalement au Japon, il est plus susceptible d’améliorer les performances s’il est installé dans un Japon.

Enfin, cochez « Épingler au tableau de bord » et cliquez sur le bouton « Créer ».

作成

Le tableau de bord contient la ressource que vous avez créée précédemment, alors cliquez dessus pour l’ouvrir.

リソースを開く

Je pense que la vue d’ensemble est ouverte, alors vérifiez l’URL de « Point de terminaison » sur la droite. Il s’agit de l’URL de l’API à laquelle il faut d’abord accéder par authentification. Cependant, cela change rarement, et c’est décrit dans le programme que je présenterai plus tard, il est donc bon de se rappeler qu’il est là pour le moment.

Endpoint

Sélectionnez Clés dans le menu.

「Keys」を選択

Notez la CLÉ 1 qui apparaît et utilisez-la pour vous authentifier. Je pense qu’avoir deux clés est probablement une réserve. Soit dit en passant, si la clé fuit vers l’extérieur pour une raison quelconque, vous pouvez la recréer avec « Régénérer... » ci-dessus.

「KEY 1」をメモ

Ceci conclut l’installation du côté Azure.

Accès par programme à l’API pour traduire du texte

Il est maintenant temps de créer un programme afin que vous puissiez traduire le texte. Utilisez Visual Studio 2015 pour créer une application WPF et créer un écran qui ressemble à ceci :

Entrez le texte dans De, et dans Langue, entrez la langue que vous souhaitez convertir dans quelle langue. Et si vous cliquez sur le bouton « Convertir l’exécution », vous pourrez voir le texte traduit dans la « Destination » ci-dessous.

XAML (MainWindow.xaml)

Cela n’affecte pas directement la traduction, donc seul le code est inclus.

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

Obtenir un jeton d’accès (MainWindow.xaml.cs)

Le flux de base pour la traduction de texte est le suivant :

  1. Lancez KEY 1 dans l’API pour obtenir un jeton d’accès.
  2. Utilisez le jeton d’accès pour envoyer le texte au service de traduction afin d’obtenir le texte traduit.
  3. Récupérez le jeton d’accès si nécessaire

Il s’agit de.

Tout d’abord, définissons une méthode pour obtenir un jeton d’accès et le rendre facile à utiliser. Si vous passez la CLÉ 1 obtenue précédemment comme argument, vous pouvez obtenir le jeton d’accès. Il peut également être obtenu par traitement synchrone, mais puisque C# 5.0 async/await peut être utilisé, faisons-en facilement un processus asynchrone.

En tant que point, définissez l’URL sur Endpoint + « /issueToken » comme confirmé dans Azure, et définissez KEY 1 obtenu avec « Ocp-Apim-Subscription-Key » comme clé dans l’en-tête à envoyer.

En réponse, la chaîne du jeton d’accès peut être obtenue telle quelle, elle est donc utilisée comme valeur de retour. Soit dit en passant, ce jeton d’accès n’est valide que pendant 10 minutes.

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

Accéder à l’API pour la traduction de texte (MainWindow.xaml.cs)

Ceci est également transformé en une méthode pour le rendre facile à utiliser. Les arguments vous permettent de spécifier le jeton d’accès que vous obtenez et le texte à traduire, ainsi que la langue à convertir dans quelle langue.

Notez que l’URL à laquelle vous accédez est différente de l’URL où vous avez obtenu le jeton. Le texte et la langue à traduire sont envoyés sous forme de chaîne de requête dans l’URL, alors échappez-les à l’avance à l’aide de « Uri.EscapeDataString ».

La méthode GET envoie ensuite l’autorisation de l’en-tête avec le schéma « Bearer » et le jeton dans le paramètre.

Étant donné que la réponse est prise au format XML, XDocument est utilisé pour récupérer le texte traduit à l’intérieur. Toutefois, si le texte contient des caractères d’échappement XML, peut-être parce que vous utilisez XML, ils peuvent rester échappés. Convertissez-le au besoin.

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

Processus d’exécution des boutons (MainWindow.xaml.cs)

Une fois que vous avez implémenté deux méthodes, tout ce que vous avez à faire est d’appeler chacune d’elles. Vous pouvez traduire du texte en définissant KEY1 et en spécifiant la valeur entrée pour chaque méthode. Comme il s’agit d’un processus asynchrone, veuillez ajouter async à la méthode de gestion des boutons.

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 des langues traduisibles

Vous pouvez vous référer aux pages Micorsoft suivantes : Comme il s’agit de l’un des services cloud, il peut être modifié à tout moment.