Programový překlad textu pomocí rozhraní Translator Text API

Datum vytvoření stránky :

Co připravit předem

Předem si vytvořte účet Microsoft Azure. Postup vytvoření je popsán na této stránce.

Také tentokrát se zaregistrujeme s bezplatnou verzí, proto ji prosím změňte včas, pokud chcete používat placenou verzi.

Vytvoření prostředků rozhraní API

Otevřete portál Microsoft Azure a v nabídce vlevo klikněte na Nový.

「新規」をクリック

V rozbalené nabídce vyberte Možnost Inteligence + Analýza.

「Intelligence + analytics」を選択

V rozbalené nabídce vyberte Rozhraní API Cognitive Services (Preview).

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

Když se zobrazí obrazovka pro vytvoření, zadejte název podle svého výběru (bude to zobrazovaný název na řídicím panelu) a vyberte "Bezplatná zkušební verze" pro předplatné. Pak klikněte na Typ rozhraní API.

API type をクリック

V seznamu rozhraní API vyberte Translator Text API.

「Translator Text API」を選択

Pak vyberte Cenová úroveň.

Pricing tier を選択

Vzhledem k tomu, že používáte bezplatnou verzi, klikněte na "F0 Free" a klikněte na tlačítko "Vybrat". Bezplatná verze dokáže převést až 2 miliony znaků za měsíc.

「F0 Free」を選択

Pokud službu registrujete poprvé, vytvořte novou skupinu prostředků. Prostředky, které vytvoříte, můžete seskupit do skupin s libovolným názvem.

Umístění je místo pro umístění služby. Při vývoji hlavně v Japonsku je pravděpodobnější, že zlepší výkon, pokud je instalován v Japonsku.

Nakonec zaškrtněte políčko "Připnout na řídicí panel" a klikněte na tlačítko "Vytvořit".

作成

Řídicí panel obsahuje prostředek, který jste vytvořili dříve, takže ho kliknutím otevřete.

リソースを開く

Myslím, že Přehled je otevřený, takže zkontrolujte adresu URL pro "Koncový bod" vpravo. Toto je adresa URL rozhraní API, ke které by se mělo nejprve přistupovat ověřením. Zřídka se však mění a je popsán v programu, který představím později, takže je dobré si uvědomit, že je zde prozatím.

Endpoint

Vyberte Klíče z nabídky.

「Keys」を選択

Poznamenejte si KLÍČ 1, který se zobrazí, a použijte jej k ověření. Myslím, že mít dva klíče je pravděpodobně rezerva. Mimochodem, pokud klíč z nějakého důvodu uniká ven, můžete jej znovu vytvořit pomocí "Regenerovat..." výše.

「KEY 1」をメモ

Tím se dokončí nastavení na straně Azure.

Programový přístup k rozhraní API pro překlad textu

Nyní je čas skutečně vytvořit program, abyste mohli text přeložit. Pomocí sady Visual Studio 2015 vytvořte aplikaci WPF a vytvořte obrazovku, která vypadá takto:

Zadejte text do pole Od a do pole Jazyk zadejte, do kterého jazyka chcete převést. A pokud kliknete na tlačítko "Převést běh", uvidíte přeložený text v části "Cíl" níže.

XAML (MainWindow.xaml)

Nemá přímý vliv na překlad, takže je zahrnut pouze 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ískat přístupový token (MainWindow.xaml.cs)

Základní tok pro překlad textu je následující:

  1. Hoďte KLÍČ 1 do rozhraní API a získejte přístupový token.
  2. Pomocí přístupového tokenu přehoďte text do překladatelské služby, abyste získali přeložený text.
  3. V případě potřeby znovu získejte přístupový token

To přijde.

Nejprve definujeme metodu pro získání přístupového tokenu a usnadníme jeho použití. Pokud jako argument předáte KLÍČ 1 získaný dříve, můžete získat přístupový token. Lze jej také získat synchronním zpracováním, ale protože lze použít C# 5,0 async/await, udělejme z něj asynchronní proces snadno.

V tomto bodě nastavte adresu URL na koncový bod + "/issueToken", jak je potvrzeno v Azure, a nastavte klíč 1 získaný s "Ocp-Apim-Subscription-Key" jako klíč v hlavičce, která se má odeslat.

Jako odpověď lze získat řetězec přístupového tokenu tak, jak je, takže se používá jako vrácená hodnota. Mimochodem, tento přístupový token je platný pouze po dobu 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;
    }
  }
}

Přístup k rozhraní API pro překlad textu (MainWindow.xaml.cs)

To je také metoda, která usnadňuje použití. Argumenty umožňují určit přístupový token, který získáte, a text, který se má přeložit, a jazyk, který se má převést na který jazyk.

Všimněte si, že adresa URL, ke které přistupujete, se liší od adresy URL, na které jste token získali. Text a jazyk, které mají být přeloženy, jsou odeslány jako řetězec dotazu v adrese URL, takže je předem unikněte pomocí "Uri.EscapeDataString".

Metoda GET pak odešle autorizaci hlavičky se schématem "Bearer" a tokenem v parametru.

Vzhledem k tomu, že odpověď je přijata ve formátu XML, XDocument se používá k načtení přeloženého textu uvnitř. Pokud však text obsahuje řídicí znaky XML, například proto, že používáte XML, mohou zůstat uvozené. Převeďte jej podle potřeby.

/// <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 spuštění tlačítka (MainWindow.xaml.cs)

Jakmile implementujete dvě metody, vše, co musíte udělat, je zavolat každou z nich. Text můžete přeložit nastavením KEY1 a zadáním zadané hodnoty pro každou metodu. Vzhledem k tomu, že se jedná o asynchronní proces, přidejte asynchronní metodu zpracování tlačítek.

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 přeložitelných jazyků

Můžete se obrátit na následující stránky Micorsoft: Vzhledem k tomu, že se jedná o jednu z cloudových služeb, může být kdykoli změněna.