Programsko prevajanje besedila z uporabo API besedila prevajalca

Datum ustvarjanja strani :

Kaj pripraviti vnaprej

Pred tem ustvarite račun Microsoft Azure. Postopek ustvarjanja je opisan na tej strani.

Prav tako se bomo tokrat registrirali z brezplačno različico, zato jo prosimo, da jo pravočasno spremenite, če želite uporabiti plačljive različice.

Ustvarjanje api virov

Odprite portal Microsoft Azure in v levem meniju kliknite Novo.

「新規」をクリック

V razširjenem meniju izberite Intelligence + Analytics.

「Intelligence + analytics」を選択

V razširjenem meniju izberite API-ji kognitivnih storitev (Predogled).

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

Ko se prikaže zaslon za ustvarjanje, vnesite ime po vaši izbiri (to bo prikazano ime na nadzorni plošči) in izberite »Brezplačna preskusna različica« za naročnino. Nato kliknite TIP API-ja.

API type をクリック

Na seznamu API-jev izberite API besedila prevajalca.

「Translator Text API」を選択

Nato izberite Določanje cen.

Pricing tier を選択

Ker uporabljate brezplačno različico, kliknite "F0 Free" in kliknite gumb "Select". Brezplačna različica lahko pretvori do 2 milijona znakov na mesec.

「F0 Free」を選択

Če prvič registrirate storitev, ustvarite novo skupino virov. Vire, ki jih ustvarite, lahko združite v skupine vseh imen.

Lokacija je kraj za storitev. Pri razvoju predvsem na Japonskem je bolj mogoče izboljšati učinkovitost, če je nameščena na Japonskem.

Na koncu preverite "Pripni na nadzorno ploščo" in kliknite gumb "Ustvari".

作成

Nadzorna plošča ima vir, ki ste ga prej ustvarili, zato ga kliknite, da ga odprete.

リソースを開く

Mislim, da je pregled odprt, zato preverite URL za "Endpoint" na desni. To je URL API-ja, do h čem bi morali najprej dostopati s preverjanjem pristnosti. Vendar pa se redko spreminja, in opisano je v programu, ki ga bom predstavil kasneje, zato je dobro, da si zapomnite, da je tukaj za zdaj.

Endpoint

V meniju izberite Tipke.

「Keys」を選択

Zabeleži tipko KEY 1, ki se prikaže in jo uporabi za preverjanje pristnosti. Mislim, da je imeti dva ključa rezerva. Mimogrede, če ključ iz nekega razloga uhaja v zunanjost, ga lahko ponovno poučite z "Regenerate..." zgoraj.

「KEY 1」をメモ

S tem se zaključi nastavitev na strani Azure.

Programski dostop do API za prevajanje besedila

Zdaj je čas, da ustvarite program, da lahko prevedete besedilo. S programsko opremo Visual Studio 2015 ustvarite program WPF in ustvarite zaslon, ki izgleda takole:

Vnesite besedilo v Od in v jeziku, vnesite kateri jezik želite pretvoriti v kateri jezik. In če kliknete na gumb "Pretvori teči", boste lahko videli prevedeno besedilo v "Cilj" spodaj.

XAML (MainWindow.xaml)

Ne vpliva neposredno na prevod, zato je vključena le koda.

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

Get Access Token (MainWindow.xaml.cs)

Osnovni tok za prevajanje besedila je naslednji:

  1. Vrzi tipko 1 v API, da bi dobili žeton za dostop.
  2. Če želite prevesti prevedeno besedilo, uporabite žeton za dostop, da besedilo vržete v prevajalski servis.
  3. Po potrebi znova vzemite žeton za dostop

Gre za to.

Najprej določimo metodo za dostopni žeton in olajšamo uporabo. Če ste dobili ključ 1 prej kot argument, lahko dobite žeton za dostop. Lahko ga dobimo tudi s sinhrono obdelavo, ker pa se lahko uporablja C# 5.0 async/await, naj bo asinkron proces enostavno.

Kot točko nastavite URL na Endpoint + "/issueToken", kot je potrjeno v Azure, in nastavite TIPKO 1, pridobljeno z "Ocp-Apim-Subscription-Key" kot ključ v glavi, ki ga je treba poslati.

Kot odgovor je mogoče niz žetona za dostop pridobiti tako, kot je, zato se uporablja kot povratna vrednost. Mimogrede, ta žeton za dostop velja le 10 minut.

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

Dostop do API za prevajanje besedila (MainWindow.xaml.cs)

To je tudi narejeno v metodo, da je enostavna za uporabo. Argumenti vam omogočajo, da določite žeton za dostop, ki ga dobite, in besedilo za prevajanje in kateri jezik pretvorite v kateri jezik.

Upoštevajte, da se URL, do katerem dostopate, razlikuje od URL-ja, kjer ste pridobili žeton. Besedilo in jezik, ki ga želite prevesti, se pošljeta kot niz poizvedbe v URL-ju, zato jim vnaprej pobegnite z uporabo »Uri.EscapeDataString«.

Metoda GET nato pošlje dovoljenje za glavo s shemo "Bearer" in žetonom v parametru.

Ker je odgovor sprejet v obliki XML, se XDocument uporablja za pridobivanje prevedenega besedila v notranjosti. Če pa besedilo vsebuje znake xml pobega, morda zato, ker uporabljate XML, lahko ostanejo ubežali. Pretvori, kot je potrebno.

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

Postopek izvršitve gumbov (MainWindow.xaml.cs)

Ko izvedeš dve metodi, moraš poklicati vsako. Besedilo lahko prevedete tako, da nastavite KEY1 in določite vneseno vrednost za vsako metodo. Ker gre za asinkron proces, prosimo, dodajte asinc metodi za ravnanje z gumbi.

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

Seznam prevodnih jezikov

Morda se želite sklicevati na te micorsoft strani: Ker gre za eno od storitev v oblaku, se lahko kadarkoli spremeni.