Traducir texto mediante programación mediante la API Translator Text

Fecha de creación de la página :

Qué preparar con anticipación

Cree una cuenta de Microsoft Azure de antemano. El procedimiento de creación se describe en esta página.

Además, esta vez nos registraremos con la versión gratuita, así que cámbiela de manera oportuna si desea usar la versión de pago.

Crear recursos de API

Abra el Portal de Microsoft Azure y haga clic en Nuevo en el menú de la izquierda.

「新規」をクリック

Seleccione Inteligencia + Análisis en el menú expandido.

「Intelligence + analytics」を選択

En el menú expandido, seleccione API de Cognitive Services (vista previa).

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

Cuando aparezca la pantalla de creación, ingrese un nombre de su elección (será el nombre para mostrar en el tablero) y seleccione "Prueba gratuita" para la suscripción. A continuación, haga clic en Tipo de API.

API type をクリック

Seleccione Translator Text API en la lista de API.

「Translator Text API」を選択

A continuación, seleccione Nivel de precios.

Pricing tier を選択

Ya que está utilizando la versión gratuita, haga clic en "F0 Gratis" y haga clic en el botón "Seleccionar". La versión gratuita puede convertir hasta 2 millones de caracteres por mes.

「F0 Free」を選択

Si va a registrar un servicio por primera vez, cree un nuevo grupo de recursos. Puede agrupar los recursos que cree en grupos de cualquier nombre.

Una ubicación es un lugar para poner un servicio. Cuando se desarrolla principalmente en Japón, es más probable que mejore el rendimiento si se instala en un Japón.

Finalmente, marque "Anclar al tablero" y haga clic en el botón "Crear".

作成

El panel tiene el recurso que creó anteriormente, así que haga clic en él para abrirlo.

リソースを開く

Creo que la descripción general está abierta, así que verifique la URL de "Endpoint" a la derecha. Esta es la URL de la API a la que se debe acceder primero mediante autenticación. Sin embargo, rara vez cambia, y se describe en el programa que presentaré más adelante, por lo que es bueno recordar que está aquí por el momento.

Endpoint

Seleccione Teclas en el menú.

「Keys」を選択

Anote la CLAVE 1 que aparece y utilícela para autenticarse. Creo que tener dos llaves es probablemente una reserva. Por cierto, si la llave se filtra al exterior por alguna razón, puede recrearla con "Regenerar ..." arriba.

「KEY 1」をメモ

Esto concluye la configuración en el lado de Azure.

Acceda mediante programación a la API para traducir texto

Ahora es el momento de crear un programa para que pueda traducir el texto. Use Visual Studio 2015 para crear una aplicación WPF y crear una pantalla que tenga el siguiente aspecto:

Escriba texto en Desde, y en Idioma, escriba el idioma que desea convertir a qué idioma. Y si hace clic en el botón "Convertir ejecutar", podrá ver el texto traducido en el "Destino" a continuación.

XAML (MainWindow.xaml)

No afecta directamente a la traducción, por lo que solo se incluye el código.

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

Obtener token de acceso (MainWindow.xaml.cs)

El flujo básico para la traducción de texto es el siguiente:

  1. Lance KEY 1 en la API para obtener un token de acceso.
  2. Utilice el token de acceso para lanzar el texto al servicio de traducción para obtener el texto traducido.
  3. Obtenga el token de acceso nuevamente si es necesario

Se trata de.

Primero, definamos un método para obtener un token de acceso y facilitar su uso. Si pasa la CLAVE 1 obtenida anteriormente como argumento, puede obtener el token de acceso. También se puede obtener mediante procesamiento sincrónico, pero dado que se puede usar C# 5.0 asincrónico / await, convirtámoslo en un proceso asincrónico fácilmente.

Como punto, establezca la dirección URL en Endpoint + "/issueToken" como se confirma en Azure y establezca KEY 1 obtenida con "Ocp-Apim-Subscription-Key" como la clave en el encabezado que se va a enviar.

Como respuesta, la cadena del token de acceso se puede obtener tal cual, por lo que se utiliza como valor devuelto. Por cierto, este token de acceso solo es válido durante 10 minutos.

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

Acceda a la API para la traducción de texto (MainWindow.xaml.cs)

Esto también se convierte en un método para que sea fácil de usar. Los argumentos le permiten especificar el token de acceso que obtiene y el texto que desea traducir, y qué idioma convertir a qué idioma.

Tenga en cuenta que la dirección URL a la que accede es diferente de la dirección URL a la que obtuvo el token. El texto y el idioma que se van a traducir se envían como una cadena de consulta en la URL, así que escápese de ellos usando "Uri.EscapeDataString" por adelantado.

A continuación, el método GET envía la autorización del encabezado con el esquema "Portador" y el token en el parámetro.

Dado que la respuesta se toma en formato XML, XDocument se utiliza para recuperar el texto traducido en su interior. Sin embargo, si el texto contiene caracteres de escape XML, tal vez porque está utilizando XML, es posible que permanezcan escapados. Conviértelo según sea necesario.

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

Proceso de ejecución de botones (MainWindow.xaml.cs)

Una vez que haya implementado dos métodos, todo lo que tiene que hacer es llamar a cada uno. Puede traducir texto estableciendo KEY1 y especificando el valor introducido para cada método. Dado que es un proceso asincrónico, agregue asincrónico al método de manejo de botones.

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 de idiomas traducibles

Es posible que desee consultar las siguientes páginas de Micorsoft: Dado que es uno de los servicios en la nube, se puede cambiar en cualquier momento.