Translator Metin Çevirisi API'sini kullanarak metni program aracılığıyla çevirme

Sayfa oluşturma tarihi :

Önceden ne hazırlanmalı

Önceden bir Microsoft Azure hesabı oluşturun. Oluşturma prosedürü bu sayfada açıklanmıştır.

Ayrıca, bu sefer ücretsiz sürüme kaydolacağız, bu nedenle ücretli sürümü kullanmak istiyorsanız lütfen zamanında değiştirin.

API kaynakları oluşturma

Microsoft Azure portalını açın ve soldaki menüden Yeni'ye tıklayın.

「新規」をクリック

Genişletilmiş menüden Intelligence + Analytics'i seçin.

「Intelligence + analytics」を選択

Genişletilmiş menüden Bilişsel Hizmetler API'leri (Önizleme) öğesini seçin.

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

Oluşturma ekranı göründüğünde, seçtiğiniz bir adı girin (panodaki görünen ad olacaktır) ve abonelik için "Ücretsiz Deneme" yi seçin. Ardından API türü'nü tıklayın.

API type をクリック

API'ler listesinden Translator Metin Çevirisi API'si'ni seçin.

「Translator Text API」を選択

Ardından Fiyatlandırma katmanı'nı seçin.

Pricing tier を選択

Ücretsiz sürümü kullandığınızdan, "F0 Free" yi tıklayın ve "Seç" düğmesini tıklayın. Ücretsiz sürüm ayda 2 milyon karaktere kadar dönüştürebilir.

「F0 Free」を選択

Bir hizmeti ilk kez kaydediyorsanız, yeni bir Kaynak grubu oluşturun. Oluşturduğunuz kaynakları herhangi bir addaki gruplar halinde gruplandırabilirsiniz.

Bir konum, hizmet vermek için bir yerdir. Esas olarak Japonya'da geliştirilirken, bir Japonya'da kurulursa performansı artırma olasılığı daha yüksektir.

Son olarak, "Kontrol paneline sabitle" yi işaretleyin ve "Oluştur" düğmesini tıklayın.

作成

Panoda daha önce oluşturduğunuz kaynak bulunduğundan, açmak için panoya tıklayın.

リソースを開く

Genel Bakış'ın açık olduğunu düşünüyorum, bu yüzden sağdaki "Uç Nokta" URL'sini kontrol edin. Bu, önce kimlik doğrulaması ile erişilmesi gereken API'nin URL'sidir. Ancak, nadiren değişir ve daha sonra tanıtacağım programda açıklanmıştır, bu yüzden şu an için burada olduğunu hatırlamak iyidir.

Endpoint

Menüden Anahtarlar'ı seçin.

「Keys」を選択

Görünen KEY 1'i not edin ve kimlik doğrulaması için kullanın. Bence iki anahtara sahip olmak muhtemelen bir rezerv. Bu arada, anahtar herhangi bir nedenle dışarıya sızarsa, yukarıdaki "Regenerate..." ile yeniden oluşturabilirsiniz.

「KEY 1」をメモ

Bu, Azure tarafındaki kurulumu tamamlar.

Metin çevirmek için API'ye program aracılığıyla erişin

Şimdi metni çevirebilmeniz için aslında bir program oluşturmanın zamanı geldi. WPF uygulaması oluşturmak ve şuna benzeyen bir ekran oluşturmak için Visual Studio 2015 kullanın:

Kimden'e metin girin ve Dil'de hangi dili hangi dile dönüştürmek istediğinizi girin. Ve "Çalıştırmayı Dönüştür" düğmesini tıklarsanız, çevrilmiş metni aşağıdaki "Hedef" te görebilirsiniz.

XAML (MainWindow.xaml)

Çeviriyi doğrudan etkilemez, bu nedenle yalnızca kod dahil edilir.

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

Erişim Belirteci Al (MainWindow.xaml.cs)

Metin çevirisi için temel akış aşağıdaki gibidir:

  1. Erişim belirteci almak için KEY 1'i API'ye atın.
  2. Çevrilmiş metni almak üzere metni çeviri hizmetine atmak için erişim belirtecini kullanın.
  3. Gerekirse erişim belirtecini yeniden alma

Geliyor.

İlk olarak, erişim belirteci almak ve kullanımını kolaylaştırmak için bir yöntem tanımlayalım. Daha önce elde edilen KEY 1'i bağımsız değişken olarak geçirirseniz, erişim belirtecini alabilirsiniz. Senkron işleme ile de elde edilebilir, ancak C# 5.0 async/await kullanılabildiğinden, bunu kolayca asenkron bir işlem haline getirelim.

Bir nokta olarak, URL'yi Azure'da onaylandığı gibi Endpoint + "/issueToken" olarak ayarlayın ve gönderilecek üstbilgideki anahtar olarak "Ocp-Apim-Subscription-Key" ile elde edilen KEY 1'i ayarlayın.

Yanıt olarak, erişim belirtecinin dizesi olduğu gibi elde edilebilir, bu nedenle dönüş değeri olarak kullanılır. Bu arada, bu erişim belirteci yalnızca 10 dakika geçerlidir.

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

Metin çevirisi için API'ye erişin (MainWindow.xaml.cs)

Bu aynı zamanda kullanımı kolaylaştırmak için bir yöntem haline getirilmiştir. Bağımsız değişkenler, aldığınız erişim belirtecini ve çevrilecek metni ve hangi dilin hangi dile dönüştürüleceğini belirtmenize olanak tanır.

Eriştiğiniz URL'nin, belirteci aldığınız URL'den farklı olduğunu unutmayın. Çevrilecek metin ve dil URL'de bir sorgu dizesi olarak gönderilir, bu nedenle önceden "Uri.EscapeDataString" kullanarak bunlardan kaçının.

GET yöntemi daha sonra "Bearer" şeması ve parametredeki belirteçle Üstbilginin Yetkilendirmesini gönderir.

Yanıt XML biçiminde alındığından, içindeki çevrilmiş metni almak için XDocument kullanılır. Ancak, metin XML kaçış karakterleri içeriyorsa, belki de XML kullandığınız için, bunlar kaçışlı olarak kalabilir. Gerektiği gibi dönüştürün.

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

Düğme yürütme işlemi (MainWindow.xaml.cs)

İki yöntem uyguladıktan sonra, tek yapmanız gereken her birini aramaktır. KEY1'i ayarlayarak ve her yöntem için girilen değeri belirterek metni çevirebilirsiniz. Zaman uyumsuz bir işlem olduğundan, lütfen düğme işleme yöntemine zaman uyumsuz ekleyin.

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

Çevrilebilir dillerin listesi

Aşağıdaki Micorsoft sayfalarına başvurmak isteyebilirsiniz: Bulut hizmetlerinden biri olduğu için herhangi bir zamanda değiştirilebilir.