Programmgesteuertes Übersetzen von Text mithilfe der Textübersetzungs-API

Erstellungsdatum der Seite :

Was im Voraus vorbereitet werden sollte

Erstellen Sie vorher ein Microsoft Azure-Konto. Der Erstellungsvorgang wird auf dieser Seite beschrieben.

Auch dieses Mal werden wir uns mit der kostenlosen Version registrieren, also ändern Sie sie bitte rechtzeitig, wenn Sie die kostenpflichtige Version verwenden möchten.

Erstellen von API-Ressourcen

Öffnen Sie das Microsoft Azure-Portal, und klicken Sie im linken Menü auf Neu.

「新規」をクリック

Wählen Sie im erweiterten Menü Intelligence + Analytics aus.

「Intelligence + analytics」を選択

Wählen Sie im erweiterten Menü Cognitive Services-APIs (Vorschau) aus.

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

Wenn der Erstellungsbildschirm angezeigt wird, geben Sie einen Namen Ihrer Wahl ein (dies ist der Anzeigename auf dem Dashboard) und wählen Sie "Kostenlose Testversion" für das Abonnement. Klicken Sie dann auf API-Typ.

API type をクリック

Wählen Sie Text-API übersetzen aus der Liste der APIs.

「Translator Text API」を選択

Wählen Sie dann Tarif aus.

Pricing tier を選択

Da Sie die kostenlose Version verwenden, klicken Sie auf "F0 Free" und klicken Sie auf die Schaltfläche "Select". Die kostenlose Version kann bis zu 2 Millionen Zeichen pro Monat konvertieren.

「F0 Free」を選択

Wenn Sie einen Dienst zum ersten Mal registrieren, erstellen Sie eine neue Ressourcengruppe. Sie können die von Ihnen erstellten Ressourcen in Gruppen mit beliebigem Namen gruppieren.

Ein Standort ist ein Ort, an dem eine Dienstleistung erbracht werden kann. Wenn es hauptsächlich in Japan entwickelt wird, ist es wahrscheinlicher, dass die Leistung verbessert wird, wenn es in einem Japan installiert wird.

Aktivieren Sie abschließend "An Dashboard anheften" und klicken Sie auf die Schaltfläche "Erstellen".

作成

Das Dashboard enthält die Ressource, die Sie zuvor erstellt haben, also klicken Sie darauf, um sie zu öffnen.

リソースを開く

Ich denke, die Übersicht ist offen, also überprüfen Sie die URL für "Endpunkt" auf der rechten Seite. Dies ist die URL der API, auf die zuerst durch Authentifizierung zugegriffen werden sollte. Es ändert sich jedoch selten, und es wird in dem Programm beschrieben, das ich später vorstellen werde, also ist es gut, sich daran zu erinnern, dass es vorerst hier ist.

Endpoint

Wählen Sie im Menü Tasten aus.

「Keys」を選択

Notieren Sie sich den angezeigten KEY 1 und verwenden Sie ihn zur Authentifizierung. Ich denke, zwei Schlüssel zu haben, ist wahrscheinlich eine Reserve. Übrigens, wenn der Schlüssel aus irgendeinem Grund nach außen durchsickert, können Sie ihn mit "Regenerate..." oben.

「KEY 1」をメモ

Damit ist das Setup auf der Azure-Seite abgeschlossen.

Programmgesteuerter Zugriff auf die API, um Text zu übersetzen

Jetzt ist es an der Zeit, tatsächlich ein Programm zu erstellen, damit Sie den Text übersetzen können. Verwenden Sie Visual Studio 2015, um eine WPF-Anwendung und einen Bildschirm zu erstellen, der wie folgt aussieht:

Geben Sie Text in From ein, und geben Sie unter Sprache ein, welche Sprache Sie in welche Sprache konvertieren möchten. Und wenn Sie auf die Schaltfläche "Convert Run" klicken, können Sie den übersetzten Text im "Ziel" unten sehen.

XAML (MainWindow.xaml)

Es wirkt sich nicht direkt auf die Übersetzung aus, daher ist nur der Code enthalten.

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

Abrufen des Zugriffstokens (MainWindow.xaml.cs)

Der grundlegende Ablauf für die Textübersetzung ist wie folgt:

  1. Werfen Sie KEY 1 in die API, um ein Zugriffstoken zu erhalten.
  2. Verwenden Sie das Zugriffstoken, um den Text an den Übersetzungsdienst zu übergeben, um den übersetzten Text abzurufen.
  3. Holen Sie sich das Zugriffstoken bei Bedarf erneut.

Es kommt zu.

Lassen Sie uns zunächst eine Methode definieren, um ein Zugriffstoken zu erhalten und es einfach zu verwenden. Wenn Sie den zuvor erhaltenen KEY 1 als Argument übergeben, können Sie das Zugriffstoken abrufen. Es kann auch durch synchrone Verarbeitung erhalten werden, aber da C # 5.0 async / await verwendet werden kann, machen wir es einfach zu einem asynchronen Prozess.

Legen Sie als Punkt die URL auf Endpunkt + "/issueToken" fest, wie in Azure bestätigt, und legen Sie KEY 1 mit "Ocp-Apim-Subscription-Key" als Schlüssel im zu sendenden Header fest.

Als Antwort kann die Zeichenfolge des Zugriffstokens so abgerufen werden, wie sie ist, sodass sie als Rückgabewert verwendet wird. Dieses Zugriffstoken ist übrigens nur 10 Minuten gültig.

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

Zugreifen auf die API für die Textübersetzung (MainWindow.xaml.cs)

Dies wird auch zu einer Methode gemacht, um es einfach zu bedienen. Mit den Argumenten können Sie das Zugriffstoken angeben, das Sie erhalten, und den zu übersetzenden Text sowie die Sprache, die in welche Sprache konvertiert werden soll.

Beachten Sie, dass sich die URL, auf die Sie zugreifen, von der URL unterscheidet, unter der Sie das Token erhalten haben. Der zu übersetzende Text und die zu übersetzende Sprache werden als Abfragezeichenfolge in der URL gesendet, also escapen Sie sie im Voraus mit "Uri.EscapeDataString".

Die GET-Methode sendet dann die Autorisierung des Headers mit dem Schema "Bearer" und dem Token im Parameter.

Da die Antwort im XML-Format erfolgt, wird XDocument verwendet, um den darin enthaltenen übersetzten Text abzurufen. Wenn der Text jedoch XML-Escapezeichen enthält, möglicherweise weil Sie XML verwenden, bleiben diese möglicherweise mit Escapezeichen versehen. Konvertieren Sie es nach Bedarf.

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

Prozess der Schaltflächenausführung (MainWindow.xaml.cs)

Sobald Sie zwei Methoden implementiert haben, müssen Sie nur noch jede einzelne aufrufen. Sie können Text übersetzen, indem Sie KEY1 setzen und den eingegebenen Wert für jede Methode angeben. Da es sich um einen asynchronen Prozess handelt, fügen Sie der Schaltflächenbehandlungsmethode async hinzu.

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

Liste der übersetzbaren Sprachen

Sie können auf die folgenden Micorsoft-Seiten verweisen: Da es sich um einen der Cloud-Dienste handelt, kann er jederzeit geändert werden.