Програмно перекладати текст за допомогою ТЕКСТОВОГО API перекладача

Дата створення сторінки :

Що приготувати заздалегідь

Заздалегідь створіть обліковий запис Microsoft Azure. Процедура створення описана на цій сторінці.

Крім того, цього разу ми зареєструємось у безкоштовній версії, тому, будь ласка, своєчасно її змініть, якщо ви хочете використовувати платну версію.

Створення ресурсів API

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

「新規」をクリック

Виберіть Інтелект + Аналітика в розгорнутому меню.

「Intelligence + analytics」を選択

У розгорнутому меню виберіть API когнітивних служб (Попередній перегляд).

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

Коли з'явиться екран створення, введіть обране вами ім'я (це буде коротке ім'я на інформаційній панелі) і виберіть для підписки "Безкоштовна пробна версія". Потім натисніть тип API.

API type をクリック

Виберіть Текстовий API перекладача зі списку API.

「Translator Text API」を選択

Потім виберіть Рівень цін.

Pricing tier を選択

Так як ви використовуєте безкоштовну версію, натисніть "F0 Free" і натисніть кнопку "Вибрати". Безкоштовна версія може конвертувати до 2 мільйонів символів на місяць.

「F0 Free」を選択

Якщо ви реєструєте службу вперше, створіть нову групу ресурсів. Ви можете згрупувати ресурси, які ви створюєте, у групи з будь-яким ім'ям.

Локація - це місце для розміщення послуги. При розробці в основному в Японії з більшою ймовірністю поліпшить показники, якщо його встановити в Японії.

Нарешті, відзначте пункт "Закріпити на інформаційній панелі" і натисніть кнопку "Створити".

作成

На приладній дошці є ресурс, який ви створили раніше, тому клацніть його, щоб відкрити.

リソースを開く

Я думаю, що Огляд відкритий, тому перевірте URL-адресу на "Кінцеву точку" праворуч. Це URL-адреса API, до якої спочатку слід отримати доступ за допомогою автентифікації. Однак вона рідко змінюється, і вона описана в програмі, яку я представлю пізніше, тому добре пам'ятати, що вона є тут поки що.

Endpoint

Виберіть клавіші в меню.

「Keys」を選択

Занотуйте ключ 1, що з'явиться, і використовуйте його для автентифікації. Я думаю, що наявність двох ключів - це, мабуть, резерв. До речі, якщо ключ з якихось причин витікає назовні, відтворити його можна з «Регенерувати...» вище.

「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. Киньте КЛЮЧ 1 в API, щоб отримати токен доступу.
  2. Використовуйте маркер доступу, щоб кинути текст до служби перекладу, щоб отримати перекладений текст.
  3. За потреби отримайте маркер доступу знову

Доходить до.

По-перше, давайте визначимося з методом отримання токена доступу і зробити його простим у використанні. Якщо ви перейдете ключ 1, отриманий раніше, як аргумент, ви можете отримати токен доступу. Його також можна отримати шляхом синхронної обробки, але оскільки можна використовувати C# 5.0 async/wait, давайте зробимо його асинхронним процесом легко.

В якості точки, встановіть 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 відправляє Авторизацію Заголовка зі схемою «Пред'явник» і токен в параметрі.

Оскільки відповідь взята у форматі XML, XDocument використовується для отримання перекладеного тексту всередині. Однак, якщо текст містить символи втечі 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 і вказавши введене значення для кожного методу. Оскільки це асинхронний процес, будь ласка, додайте асинкцію до методу обробки кнопок.

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: Оскільки це один з хмарних сервісів, він може бути змінений в будь-який час.