Teksti programmiliselt tõlkimine tõlkija teksti API abil

Lehe loomise kuupäev :

Mida ette valmistada

Looge eelnevalt Microsoft Azure'i konto. Loomisprotseduuri kirjeldatakse sellel lehel.

Samuti registreerime seekord tasuta versiooni, nii et palun muutke seda õigeaegselt, kui soovite kasutada tasulist versiooni.

API ressursside loomine

Avage Microsoft Azure'i portaal ja klõpsake vasakus menüüs nuppu Uus.

「新規」をクリック

Valige laiendatud menüüst Intelligence + Analytics.

「Intelligence + analytics」を選択

Valige laiendatud menüüst Kognitiivsete teenuste API-d (eelvaade).

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

Loomiskuva kuvamisel sisestage oma valitud nimi (see on armatuurlaual kuvatav nimi) ja valige tellimuse jaoks "Tasuta prooviversioon". Seejärel klõpsake nuppu API tüüp.

API type をクリック

Valige API-de loendist Tõlkija teksti API.

「Translator Text API」を選択

Seejärel valige Hinnakujunduse tase.

Pricing tier を選択

Kuna kasutate tasuta versiooni, klõpsake nuppu "F0 Tasuta" ja klõpsake nuppu "Vali". Tasuta versioon võib teisendada kuni 2 miljonit märki kuus.

「F0 Free」を選択

Kui registreerite teenuse esimest korda, looge uus ressursirühm. Loodavad ressursid saate rühmitada mis tahes nimega rühmadesse.

Asukoht on koht, kuhu teenust paigutada. Peamiselt Jaapanis arenedes on tõenäolisem, et see parandab jõudlust, kui see on paigaldatud Jaapanisse.

Lõpuks märkige ruut "Kinnita armatuurlauale" ja klõpsake nuppu "Loo".

作成

Armatuurlaual on ressurss, mille olete varem loonud, nii et klõpsake seda selle avamiseks.

リソースを開く

Ma arvan, et ülevaade on avatud, nii et kontrollige url-i "Lõpp-punkti" paremal. See on API URL, millele tuleks kõigepealt autentimisega juurde pääseda. Kuid see muutub harva ja seda kirjeldatakse programmis, mida ma hiljem tutvustan, seega on hea meeles pidada, et see on praegu siin.

Endpoint

Valige menüüst Klahvid.

「Keys」を選択

Märkige üles kuvatav võti 1 ja kasutage seda autentimiseks. Ma arvan, et kahe võtme omamine on ilmselt reserv. Muide, kui võti lekib mingil põhjusel väljapoole, saate selle uuesti luua ülaltoodud "Regenerate...".

「KEY 1」をメモ

See lõpetab Azure'i poole häälestuse.

Programmiliselt juurdepääs API-le teksti tõlkimiseks

Nüüd on aeg tegelikult luua programm, et saaksite teksti tõlkida. Visual Studio 2015 abil saate luua WPF-rakenduse ja luua ekraani, mis näeb välja selline.

Sisestage tekst jaotisse Saatja ja keel, sisestage keel, millist keelt soovite millisesse keelde teisendada. Ja kui klõpsate nupul "Convert Run", näete tõlgitud teksti allpool olevas jaotises "Sihtkoht".

XAML (MainWindow.xaml)

See ei mõjuta otseselt tõlget, seega on lisatud ainult kood.

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

Hankige juurdepääsuluba (MainWindow.xaml.cs)

Teksti tõlkimise põhivoog on järgmine:

  1. Visake VÕTI 1 API-sse, et saada juurdepääsumärk.
  2. Tõlgitud teksti saamiseks kasutage juurdepääsuluba, et visata tekst tõlketeenusele.
  3. Vajadusel hankige juurdepääsuluba uuesti

Asi on selles.

Esiteks määratleme meetodi juurdepääsuloa saamiseks ja selle hõlpsaks kasutamiseks. Kui läbite argumendina varem saadud VÕTME 1, saate juurdepääsuloa. Seda saab ka sünkroonse töötlemise teel, kuid kuna C # 5.0 async / await saab kasutada, muudame selle asünkroonseks protsessiks kergesti.

Määrake url-i väärtuseks Azure'is kinnitatud lõpp-punkt + "/issueToken" ja määrake saadetava päise võtmeks võti 1, mis on saadud funktsiooniga "Ocp-Apim-Subscription-Key".

Vastusena saab pääsuloa stringi hankida sellisena, nagu see on, nii et seda kasutatakse tagastusväärtusena. Muide, see juurdepääsuluba kehtib ainult 10 minutit.

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

Juurdepääs TEKSTITõlke API-le (MainWindow.xaml.cs)

See on tehtud ka meetodiks, mis muudab selle kasutamise lihtsaks. Argumendid võimaldavad teil määrata saadud juurdepääsuloa ja tõlgitava teksti ning millisesse keelde teisendada, millisesse keelde teisendada.

Pange tähele, et url, millele pääsete juurde, erineb URL-ist, kust luba saite. Tõlgitav tekst ja keel saadetakse URL-is päringustringina, nii et pääsete neist eelnevalt "Uri.EscapeDataString" abil.

Get-meetod saadab seejärel päise autoriseerimise skeemiga "Kandja" ja parameetri märgiga.

Kuna vastus võetakse XML-vormingus, kasutatakse XDocumenti tõlgitud teksti toomiseks sees. Kui aga tekst sisaldab XML-i pääsumärke, võib-olla seetõttu, et kasutate XML-i, võivad need jääda kadunuks. Teisendage see vastavalt vajadusele.

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

Nupu täitmise protsess (MainWindow.xaml.cs)

Kui olete rakendanud kaks meetodit, peate vaid helistama igaühele. Teksti saate tõlkida, seades KEY1 ja määrates iga meetodi jaoks sisestatud väärtuse. Kuna tegemist on asünkroonse protsessiga, lisage nupu käsitsemise meetodile asüün.

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

Tõlgitavate keelte loend

Võib-olla soovite viidata järgmistele Micorsofti lehtedele. Kuna see on üks pilveteenustest, võib seda igal ajal muuta.