Traduzir programáticamente texto usando a API de texto do tradutor

Data de criação de página :

O que preparar com antecedência

Crie uma conta do Microsoft Azure com antecedência. O procedimento de criação está descrito nesta página.

Além disso, desta vez vamos registrar com a versão gratuita, então, por favor, altere-a em tempo hábil se você quiser usar a versão paga.

Criar recursos de API

Abra o portal Microsoft Azure e clique em Novo no menu esquerdo.

「新規」をクリック

Selecione Intelligence + Analytics no menu expandido.

「Intelligence + analytics」を選択

No menu expandido, selecione APIs de Serviços Cognitivos (Visualização).

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

Quando a tela de criação for exibida, digite um nome de sua escolha (será o nome de exibição no painel) e selecione "Avaliação Gratuita" para a assinatura. Em seguida, clique no tipo API.

API type をクリック

Selecione API de texto do tradutor na lista de APIs.

「Translator Text API」を選択

Em seguida, selecione Nível de preços.

Pricing tier を選択

Já que você está usando a versão gratuita, clique em "F0 Free" e clique no botão "Selecionar". A versão gratuita pode converter até 2 milhões de caracteres por mês.

「F0 Free」を選択

Se você estiver registrando um serviço pela primeira vez, crie um novo grupo de recursos. Você pode agrupar os recursos que cria em grupos de qualquer nome.

Um local é um lugar para colocar um serviço. Ao se desenvolver principalmente no Japão, é mais provável que melhore o desempenho se for instalado em um Japão.

Por fim, verifique "Pino para painel" e clique no botão "Criar".

作成

O painel de instrumentos tem o recurso que você criou anteriormente, então clique nele para abri-lo.

リソースを開く

Acho que a visão geral está aberta, então verifique a URL para "Endpoint" à direita. Esta é a URL da API que deve ser acessada pela autenticação primeiro. No entanto, raramente muda, e é descrito no programa que vou introduzir mais tarde, por isso é bom lembrar que ele está aqui por enquanto.

Endpoint

Selecione Chaves no menu.

「Keys」を選択

Anote a CHAVE 1 que aparece e use-a para autenticar. Acho que ter duas chaves é provavelmente uma reserva. A propósito, se a chave vazar para o exterior por alguma razão, você pode recriá-la com "Regenerar..." acima.

「KEY 1」をメモ

Isso conclui a configuração do lado azul.

Acesse programáticamente a API para traduzir texto

Agora é hora de realmente criar um programa para que você possa traduzir o texto. Use o Visual Studio 2015 para criar um aplicativo WPF e criar uma tela que se pareça com isso:

Digite texto em From e no Language, digite qual idioma você deseja converter para qual idioma. E se você clicar no botão "Converter executar", poderá ver o texto traduzido no "Destino" abaixo.

XAML (MainWindow.xaml)

Não afeta diretamente a tradução, então apenas o código está incluído.

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

Obter token de acesso (MainWindow.xaml.cs)

O fluxo básico para tradução de texto é o seguinte:

  1. Jogue KEY 1 na API para obter um token de acesso.
  2. Use o token de acesso para jogar o texto no serviço de tradução para obter o texto traduzido.
  3. Obtenha o token de acesso novamente, se necessário

Vem para.

Primeiro, vamos definir um método para obter um token de acesso e facilitar o uso. Se você passar o KEY 1 obtido anteriormente como argumento, você pode obter o token de acesso. Também pode ser obtido por processamento síncrocro, mas como c# 5.0 async/await pode ser usado, vamos torná-lo um processo assíncrocros facilmente.

Como ponto, defina a URL para Endpoint + "/issueToken" como confirmado no Azure e defina o KEY 1 obtido com "Ocp-Apim-Subscription-Key" como a chave no cabeçalho a ser enviado.

Como resposta, a sequência do token de acesso pode ser obtida como está, por isso é usada como o valor de retorno. A propósito, este token de acesso só é válido por 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;
    }
  }
}

Acesse a API para tradução de texto (MainWindow.xaml.cs)

Isso também é feito em um método para facilitar o uso. Os argumentos permitem especificar o token de acesso que você recebe e o texto para traduzir e qual idioma converter para qual idioma.

Observe que a URL que você acessa é diferente da URL onde você obteve o token. O texto e o idioma a serem traduzidos são enviados como uma sequência de consulta na URL, então fuja-os usando "Uri.EscapeDataString" com antecedência.

Em seguida, o método GET envia a Autorização do Cabeçalho com o esquema "Portador" e o token no parâmetro.

Uma vez que a resposta é tomada no formato XML, xDocument é usado para recuperar o texto traduzido dentro. No entanto, se o texto contiver caracteres de fuga XML, talvez porque você esteja usando XML, eles podem permanecer escapar. Converta-o conforme necessário.

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

Processo de execução de botões (MainWindow.xaml.cs)

Uma vez implementado dois métodos, tudo o que você precisa fazer é chamar cada um. Você pode traduzir texto definindo KEY1 e especificando o valor inserido para cada método. Uma vez que é um processo assíncroto, por favor adicione assincron ao método de manuseio de botões.

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 traduzíveis

Você pode querer consultar as seguintes páginas do Micorsoft: Por ser um dos serviços de nuvem, pode ser alterado a qualquer momento.