Programmatiski tulkojiet tekstu, izmantojot tulkotāja teksta API

Lapas izveides datums :

Ko iepriekš sagatavot

Iepriekš izveidojiet Microsoft Azure kontu. Izveides procedūra ir aprakstīta šajā lapā.

Arī šoreiz mēs reģistrēsimies bezmaksas versijā, tāpēc, lūdzu, savlaicīgi nomainiet to, ja vēlaties izmantot maksas versiju.

Izveidojiet API resursus

Atveriet Microsoft Azure portālu un kreisajā izvēlnē noklikšķiniet uz Jauns.

「新規」をクリック

Izvērstajā izvēlnē atlasiet Informācija + Analytics.

「Intelligence + analytics」を選択

Izvērstajā izvēlnē atlasiet Kognitīvo pakalpojumu API (priekšskatījums).

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

Kad tiek parādīts izveides ekrāns, ievadiet izvēlēto vārdu (tas būs parādāmais vārds informācijas panelī) un abonementam atlasiet "Bezmaksas izmēģinājumversija". Pēc tam noklikšķiniet uz API tips.

API type をクリック

API sarakstā atlasiet Tulkotāja teksta API.

「Translator Text API」を選択

Pēc tam atlasiet Cenu līmenis.

Pricing tier を選択

Tā kā izmantojat bezmaksas versiju, noklikšķiniet uz "F0 Free" un noklikšķiniet uz pogas "Atlasīt". Bezmaksas versija var konvertēt līdz 2 miljoniem rakstzīmju mēnesī.

「F0 Free」を選択

Ja reģistrējat pakalpojumu pirmo reizi, izveidojiet jaunu resursu grupu. Izveidotos resursus var grupēt jebkura nosaukuma grupās.

Atrašanās vieta ir vieta, kur ievietot pakalpojumu. Izstrādājot galvenokārt Japānā, tas, visticamāk, uzlabos veiktspēju, ja tas ir uzstādīts Japānā.

Visbeidzot, pārbaudiet "Piespraust informācijas panelim" un noklikšķiniet uz pogas "Izveidot".

作成

Informācijas panelī ir iepriekš izveidotais resurss, tāpēc noklikšķiniet uz tā, lai to atvērtu.

リソースを開く

Es domāju, ka pārskats ir atvērts, tāpēc labajā pusē pārbaudiet "Galapunkta" URL. Šis ir API vietrādis URL, kuram vispirms jāpiekļūst, izmantojot autentifikāciju. Tomēr tas reti mainās, un tas ir aprakstīts programmā, kuru es iepazīstināšu vēlāk, tāpēc ir labi atcerēties, ka tas pagaidām ir šeit.

Endpoint

Izvēlnē atlasiet Taustiņus.

「Keys」を選択

Pierakstiet parādīto KEY 1 un izmantojiet to, lai autentificētos. Es domāju, ka divu atslēgu esamība, iespējams, ir rezerve. Starp citu, ja atslēga kāda iemesla dēļ noplūst uz ārpusi, varat to atjaunot ar iepriekš minēto "Atjaunot...".

「KEY 1」をメモ

Tādējādi tiek pabeigta iestatīšana Azure pusē.

Programmiski piekļūstiet API, lai tulkotu tekstu

Tagad ir pienācis laiks faktiski izveidot programmu, lai jūs varētu tulkot tekstu. Izmantojiet Visual Studio 2015, lai izveidotu WPF lietojumprogrammu un izveidotu ekrānu, kas izskatās šādi:

Ievadiet tekstu sadaļā No un valodā ievadiet, kuru valodu vēlaties konvertēt uz kuru valodu. Un, noklikšķinot uz pogas "Konvertēt palaist", jūs varēsiet redzēt tulkoto tekstu zemāk esošajā "Galamērķis".

XAML (MainWindow.xaml)

Tas tieši neietekmē tulkojumu, tāpēc ir iekļauts tikai kods.

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

Iegūstiet piekļuves pilnvaru (MainWindow.xaml.cs)

Teksta tulkošanas pamatplūsma ir šāda:

  1. Iemetiet ATSLĒGU 1 API, lai iegūtu piekļuves pilnvaru.
  2. Izmantojiet piekļuves marķieri, lai tekstu nodotu tulkošanas pakalpojumam un iegūtu tulkoto tekstu.
  3. Ja nepieciešams, vēlreiz iegūstiet piekļuves pilnvaru

Runa ir par to.

Pirmkārt, definēsim metodi, kā iegūt piekļuves marķieri un padarīt to viegli lietojamu. Ja kā argumentu nododat iepriekš iegūto KEY 1, varat iegūt piekļuves pilnvaru. To var iegūt arī sinhronā apstrādē, taču, tā kā var izmantot C# 5.0 asinhrono/gaidu, padarīsim to par asinhronu procesu viegli.

Kā punktu iestatiet URL uz Endpoint + "/issueToken", kā apstiprināts pakalpojumā Azure, un iestatiet KEY 1, kas iegūts ar "Ocp-Apim-Subscription-Key", kā atslēgu nosūtāmajā galvenē.

Kā atbildi piekļuves marķiera virkni var iegūt tādu, kāda tā ir, tāpēc tā tiek izmantota kā atgrieztā vērtība. Starp citu, šī piekļuves pilnvara ir derīga tikai 10 minūtes.

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

Piekļūstiet teksta tulkošanas API (MainWindow.xaml.cs)

Tas ir arī izgatavots par metodi, lai to būtu viegli lietot. Argumenti ļauj norādīt piekļuves pilnvaru, ko saņemat, un tulkojamo tekstu, kā arī to, kuru valodu konvertēt uz kuru valodu.

Ņemiet vērā, ka vietrādis URL, kuram piekļūstat, atšķiras no vietrāža URL, kurā ieguvāt marķieri. Tulkojamais teksts un valoda tiek nosūtīti kā vaicājuma virkne vietrādī URL, tāpēc izvairieties no tiem, iepriekš izmantojot "Uri.EscapeDataString".

Pēc tam get metode nosūta galvenes autorizāciju ar shēmu "Uzrādītājs" un marķieri parametrā.

Tā kā atbilde tiek uzņemta XML formātā, XDocument tiek izmantots, lai izgūtu tulkoto tekstu iekšpusē. Tomēr, ja tekstā ir XML izspiešanas rakstzīmes, iespējams, tāpēc, ka izmantojat XML, tās var palikt izbēgtas. Konvertējiet to pēc vajadzības.

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

Pogu izpildes process (MainWindow.xaml.cs)

Kad esat ieviesis divas metodes, viss, kas jums jādara, ir jāzvana katrai no tām. Tekstu var tulkot, iestatot taustiņu KEY1 un norādot ievadīto vērtību katrai metodei. Tā kā tas ir asinhrons process, lūdzu, pievienojiet asinhronu pogu apstrādes metodei.

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

Tulkojamo valodu saraksts

Jūs varat atsaukties uz šīm Micorsoft lapām: Tā kā tas ir viens no mākoņpakalpojumiem, to var mainīt jebkurā laikā.