Programovo prekladam textu pomocou rozhrania Prekladač textových rozhraní

Dátum vytvorenia strany :

Čo si pripraviť vopred

Vytvorte si konto Microsoft Azure vopred. Postup tvorby je popísaný na tejto stránke.

Tentokrát sa tiež zaregistrujeme v bezplatnej verzii, preto ju, prosím, včas zmeňte, ak chcete použiť platenú verziu.

Vytvorenie zdrojov rozhrania API

Otvorte portál Microsoft Azure a v ľavej ponuke kliknite na položku Nové.

「新規」をクリック

V rozšírenej ponuke vyberte položku Inteligencia + Analytika.

「Intelligence + analytics」を選択

V rozšírenom menu vyberte položku Rozhrania API kognitívnych služieb (Ukážka).

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

Keď sa zobrazí obrazovka vytvorenia, zadajte názov podľa vlastného výberu (bude to zobrazované meno na tabuli) a pre predplatné vyberte možnosť Bezplatná skúšobná verzia. Potom kliknite na položku Typ rozhrania API.

API type をクリック

V zozname rozhraní API Vyberte rozhranie Textové rozhranie prekladača.

「Translator Text API」を選択

Potom vyberte položku Cenová vrstva.

Pricing tier を選択

Keďže používate bezplatnú verziu, kliknite na "F0 Free" a kliknite na tlačidlo "Vybrať". Bezplatná verzia dokáže konvertovať až 2 milióny znakov mesačne.

「F0 Free」を選択

Ak registrujete službu prvýkrát, vytvorte novú skupinu zdrojov. Zdroje, ktoré vytvoríte, môžete zoskupiť do skupín ľubovoľného mena.

Miesto je miesto na poskytnutie služby. Pri vývoji hlavne v Japonsku je pravdepodobnejšie, že zlepší výkon, ak je inštalovaný v Japonsku.

Nakoniec začiarknite políčko "Pripnúť na tabuľu" a kliknite na tlačidlo "Vytvoriť".

作成

Tabuľa obsahuje zdroj, ktorý ste vytvorili skôr, takže kliknutím naň ho otvorte.

リソースを開く

Myslím, že prehľad je otvorený, takže skontrolujte URL adresu pre "Koncový bod" vpravo. Toto je URL adresa rozhrania API, ku ktorej by sa malo pristupovať najprv autentifikáciou. Málokedy sa však mení a je to popísané v programe, ktorý predstavím neskôr, takže je dobré si uvedomiť, že je tu zatiaľ.

Endpoint

V menu vyberte položku Klávesy.

「Keys」を選択

Poznačte si kľúč 1, ktorý sa zobrazí, a použite ho na overenie. Myslím, že mať dva kľúče je pravdepodobne rezerva. Mimochodom, ak kľúč z nejakého dôvodu uniká von, môžete ho obnoviť pomocou "Regenerovať..." vyššie.

「KEY 1」をメモ

Tým sa končí nastavenie na strane Azure.

Programový prístup k API na preklad textu

Teraz je čas skutočne vytvoriť program, aby ste mohli preložiť text. Pomocou Visual Studio 2015 vytvorte aplikáciu WPF a vytvorte obrazovku, ktorá vyzerá takto:

Zadajte text v časti Od a v jazyku zadajte jazyk, do ktorého jazyka chcete konvertovať. A ak kliknete na tlačidlo "Konvertovať spustiť", budete môcť vidieť preložený text v "Cieľ" nižšie.

XAML (MainWindow.xaml)

Nemá priamy vplyv na preklad, takže je zahrnutý iba kód.

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

Získať Access Token (MainWindow.xaml.cs)

Základný postup pre preklad textu je nasledovný:

  1. Hoďte KEY 1 do rozhrania API a získajte prístupový token.
  2. Pomocou prístupového tokenu prehoďte text do prekladateľskej služby, aby ste získali preložený text.
  3. V prípade potreby znova získajte prístupový token

Prichádza na to.

Po prvé, definujme metódu na získanie prístupového tokenu a uľahčime jeho používanie. Ak prejdete kľúčom 1 získaným skôr ako argument, môžete získať prístupový token. Dá sa tiež získať synchrónnym spracovaním, ale keďže sa dá použiť C # 5.0 async / await, urobme z neho ľahko asynchrónny proces.

Ako bod nastavte URL adresu na Koncový bod + "/issueToken", ako je potvrdené v Azure, a nastavte kláves KEY 1 získaný s "Ocp-Apim-Subscription-Key" ako kľúčom v hlavičke, ktorá sa má odoslať.

Ako odpoveď je možné reťazec prístupového tokenu získať taký, aký je, takže sa používa ako vrátená hodnota. Mimochodom, tento prístupový token je platný iba 10 minút.

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

Prístup k API pre preklad textu (MainWindow.xaml.cs)

To je tiež vyrobené do metódy, aby sa ľahko používať. Argumenty vám umožňujú určiť prístupový token, ktorý získate, a text na preklad a ktorý jazyk sa má konvertovať do ktorého jazyka.

Upozorňujeme, že adresa URL, ku ktorej pristupujete, sa líši od adresy URL, v ktorej ste token získali. Text a jazyk, ktorý sa má preložiť, sa odosielajú ako reťazec dotazu v URL adrese, takže im vopred uniknite pomocou "Uri.EscapeDataString".

Metóda GET potom odošle autorizáciu hlavičky so schémou "Nositeľ" a tokenom v parametri.

Keďže odpoveď je prevzatá vo formáte XML, XDocument sa používa na načítanie preloženého textu vo vnútri. Ak však text obsahuje únikové znaky XML, možno preto, že používate XML, môžu zostať unikané. Preveďte ho podľa potreby.

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

Proces vykonávania tlačidiel (MainWindow.xaml.cs)

Akonáhle implementujete dve metódy, všetko, čo musíte urobiť, je zavolať každú z nich. Text môžete preložiť nastavením klávesu KEY1 a zadaním zadanej hodnoty pre každú metódu. Keďže ide o asynchrónny proces, pridajte async do spôsobu manipulácie s tlačidlami.

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

Zoznam prekladateľných jazykov

Možno budete chcieť odkazovať na nasledujúce stránky Micorsoft: Keďže ide o jednu z cloudových služieb, môže sa kedykoľvek zmeniť.