Программный перевод текста с помощью API переводчика текста

Дата создания страницы :

Что приготовить заранее

Заранее создайте учетную запись Microsoft Azure. Процедура создания описана на этой странице.

Кроме того, на этот раз мы зарегистрируемся с бесплатной версией, поэтому, пожалуйста, измените ее своевременно, если вы хотите использовать платную версию.

Создание ресурсов API

Откройте портал Microsoft Azure и щелкните Создать в меню слева.

「新規」をクリック

Выберите Интеллект + Аналитика в развернутом меню.

「Intelligence + analytics」を選択

В развернутом меню выберите API Cognitive Services (предварительная версия).

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

Когда появится экран создания, введите имя по вашему выбору (это будет отображаемое имя на панели инструментов) и выберите «Бесплатная пробная версия» для подписки. Затем щелкните Тип API.

API type をクリック

Выберите API перевода текста из списка API.

「Translator Text API」を選択

Затем выберите Ценовая категория.

Pricing tier を選択

Поскольку вы используете бесплатную версию, нажмите «F0 Free» и нажмите кнопку «Выбрать». Бесплатная версия может конвертировать до 2 миллионов символов в месяц.

「F0 Free」を選択

Если служба регистрируется впервые, создайте новую группу ресурсов. Созданные ресурсы можно сгруппировать в группы с любым именем.

Местоположение - это место, где можно разместить услугу. При разработке в основном в Японии, он с большей вероятностью улучшит производительность, если он установлен в Японии.

Наконец, установите флажок «Закрепить на панели инструментов» и нажмите кнопку «Создать».

作成

Панель мониторинга содержит ресурс, созданный ранее, поэтому щелкните его, чтобы открыть.

リソースを開く

Я думаю, что обзор открыт, поэтому проверьте URL-адрес «Конечная точка» справа. Это URL-адрес API, к которому сначала должна быть получена проверка подлинности. Тем не менее, он редко меняется, и он описан в программе, которую я представлю позже, поэтому хорошо помнить, что он здесь на данный момент.

Endpoint

Выберите в меню пункт Ключи.

「Keys」を選択

Запишите появившийся КЛЮЧ 1 и используйте его для проверки подлинности. Я думаю, что наличие двух ключей, вероятно, является резервом. Кстати, если ключ по каким-то причинам просачивается наружу, вы можете воссоздать его с помощью «Regenerate...» выше.

「KEY 1」をメモ

На этом установка завершается на стороне Azure.

Программный доступ к API для перевода текста

Теперь пришло время фактически создать программу, чтобы вы могли перевести текст. Используйте Visual Studio 2015 для создания приложения WPF и создания экрана, который выглядит следующим образом:

Введите текст в поле От, а в поле Язык введите язык, на который вы хотите перейти. И если вы нажмете на кнопку «Конвертировать прогон», вы сможете увидеть переведенный текст в «Пункте назначения» ниже.

XAML (MainWindow.xaml)

Это напрямую не влияет на перевод, поэтому включается только код.

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

Получение маркера доступа (MainWindow.xaml.cs)

Основной поток для перевода текста выглядит следующим образом:

  1. Добавьте KEY 1 в API, чтобы получить маркер доступа.
  2. Используйте маркер доступа, чтобы отправить текст в службу перевода, чтобы получить переведенный текст.
  3. При необходимости снова получите маркер доступа

Дело доходит до того, что.

Во-первых, давайте определим метод получения маркера доступа и сделаем его простым в использовании. Если в качестве аргумента передать полученный ранее KEY 1, можно получить маркер доступа. Он также может быть получен синхронной обработкой, но поскольку C# 5.0 async/await можно использовать, давайте сделаем его асинхронным процессом легко.

В качестве точки задайте URL-адрес Endpoint + "/issueToken", как это подтверждено в Azure, и задайте КЛЮЧ 1, полученный с помощью "Ocp-Apim-Subscription-Key", в качестве ключа в заголовке для отправки.

В качестве ответа строка маркера доступа может быть получена как есть, поэтому она используется в качестве возвращаемого значения. Кстати, этот маркер доступа действителен только в течение 10 минут.

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

Доступ к API для перевода текста (MainWindow.xaml.cs)

Это также превращено в метод, чтобы сделать его простым в использовании. Аргументы позволяют указать маркер доступа, который вы получаете, и текст для перевода, а также какой язык преобразовать на какой язык.

Обратите внимание, что URL-адрес, к которому вы обращаетесь, отличается от URL-адреса, по которому вы получили маркер. Текст и язык, подлежащие переводу, отправляются в URL-адресе в виде строки запроса, поэтому заранее экранируйте их с помощью "Uri.EscapeDataString".

Затем метод GET отправляет Authorization of the Header со схемой "Bearer" и маркером в параметре.

Поскольку ответ принимается в формате XML, XDocument используется для извлечения переведенного текста внутри. Однако если текст содержит escape-символы XML, возможно, из-за использования XML, они могут остаться экранированными. Преобразуйте его по мере необходимости.

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

Процесс выполнения кнопки (MainWindow.xaml.cs)

После того, как вы реализовали два метода, все, что вам нужно сделать, это вызвать каждый из них. Можно перевести текст, установив KEY1 и указав введенное значение для каждого метода. Поскольку это асинхронный процесс, добавьте async в метод обработки кнопок.

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

Список переводимых языков

Вы можете обратиться к следующим страницам Micorsoft: Поскольку это один из облачных сервисов, он может быть изменен в любое время.