Програмно превеждане на текст с помощта на 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. Хвърлете KEY 1 в API, за да получите маркер за достъп.
  2. Използвайте маркера за достъп, за да хвърлите текста към услугата за превод, за да получите преведения текст.
  3. Получете маркера за достъп отново, ако е необходимо

Идва.

Първо, нека определим метод за получаване на маркер за достъп и да го направим лесен за използване. Ако преминете ключа 1, получен по-рано като аргумент, можете да получите маркера за достъп. Тя може да се получи и чрез синхронна обработка, но тъй като C# 5.0 async / очаква може да се използва, нека го направим асинхронен процес лесно.

Като точка задайте URL адреса на Endpoint + "/issueToken", както е потвърдено в Azure, и задайте KEY 1, получен с "Ocp-Apim-Абонамент-ключ" като ключ в заглавката, който трябва да бъде изпратен.

Като отговор низът на маркера за достъп може да се получи такъв, какъвто е, така че се използва като стойност на връщане. Между другото, този маркер за достъп е валиден само за 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 и зададете въведената стойност за всеки метод. Тъй като това е асинхронен процес, моля, добавете 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: Тъй като е една от облачните услуги, тя може да бъде променена по всяко време.