Terjemahkan teks secara programatik menggunakan API Teks Penterjemah

Tarikh penciptaan halaman :

Apa yang perlu disediakan terlebih dahulu

Buat akaun Microsoft Azure terlebih dahulu. Prosedur penciptaan diterangkan di halaman ini.

Juga, kali ini kami akan mendaftar dengan versi percuma, jadi sila ubahnya tepat pada masanya jika anda ingin menggunakan versi berbayar.

Cipta sumber API

Buka portal Microsoft Azure dan klik Baru dalam menu kiri.

「新規」をクリック

Pilih Perisikan + Analitis dari menu yang diperluaskan.

「Intelligence + analytics」を選択

Daripada menu yang dikembangkan, pilih API Perkhidmatan Kognitif (Pratonton).

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

Apabila skrin penciptaan muncul, masukkan nama pilihan anda (ia akan menjadi nama paparan di papan pemuka) dan pilih "Percubaan Percuma" untuk langganan. Kemudian klik jenis API.

API type をクリック

Pilih API Teks Penterjemah daripada senarai API.

「Translator Text API」を選択

Kemudian pilih Tahap harga.

Pricing tier を選択

Oleh kerana anda menggunakan versi percuma, klik "F0 Percuma" dan klik butang "Pilih". Versi percuma boleh menukar sehingga 2 juta aksara sebulan.

「F0 Free」を選択

Jika anda mendaftar perkhidmatan buat kali pertama, cipta kumpulan Sumber baharu. Anda boleh mengumpulkan sumber yang anda buat ke dalam kumpulan mana-mana nama.

Lokasi adalah tempat untuk meletakkan perkhidmatan. Apabila berkembang terutamanya di Jepun, ia lebih cenderung untuk meningkatkan prestasi jika ia dipasang di Jepun.

Akhirnya, periksa "Pin ke papan pemuka" dan klik butang "Buat".

作成

Papan pemuka mempunyai sumber yang anda buat sebelum ini, jadi klik untuk membukanya.

リソースを開く

Saya fikir Gambaran Keseluruhan terbuka, jadi semak URL untuk "Titik Akhir" di sebelah kanan. Ini adalah URL API yang patut diakses oleh pengesahan terlebih dahulu. Walau bagaimanapun, ia jarang berubah, dan ia diterangkan dalam program yang akan saya perkenalkan kemudian, jadi adalah baik untuk diingat bahawa ia berada di sini buat masa ini.

Endpoint

Pilih Kekunci daripada menu.

「Keys」を選択

Buat nota KEY 1 yang muncul dan gunakannya untuk mengesahkan. Saya pikir memiliki dua kunci mungkin cadangan. Dengan cara ini, jika kunci bocor ke luar atas sebab tertentu, anda boleh menciptanya semula dengan "Regenerasi semula ..." di atas.

「KEY 1」をメモ

Ini menyimpulkan persediaan di bahagian Azure.

Secara programatik mengakses API untuk menterjemahkan teks

Kini tiba masanya untuk benar-benar membuat program supaya anda boleh menterjemahkan teks. Gunakan Visual Studio 2015 untuk membuat aplikasi WPF dan buat skrin yang kelihatan seperti ini:

Masukkan teks dalam Daripada dan dalam Bahasa, masukkan bahasa yang anda ingin tukar kepada bahasa yang anda ingin tukar kepada bahasa yang mana. Dan jika anda mengklik pada butang "Tukar Jalankan", anda akan dapat melihat teks yang diterjemahkan dalam "Destinasi" di bawah.

XAML (MainWindow.xaml)

Ia tidak secara langsung menjejaskan terjemahan, jadi hanya kod yang disertakan.

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

Dapatkan Token Akses (MainWindow.xaml.cs)

Aliran asas untuk terjemahan teks adalah seperti berikut:

  1. Buang KUNCI 1 ke dalam API untuk mendapatkan token akses.
  2. Gunakan token akses untuk membuang teks ke perkhidmatan terjemahan untuk mendapatkan teks yang diterjemahkan.
  3. Dapatkan token akses sekali lagi jika perlu

Ia datang kepada.

Pertama, mari kita tentukan kaedah untuk mendapatkan token akses dan menjadikannya mudah digunakan. Jika anda lulus KEY 1 yang diperolehi lebih awal sebagai hujah, anda boleh mendapatkan token akses. Ia juga boleh diperolehi dengan pemprosesan segerak, tetapi kerana C# 5.0 async/await boleh digunakan, mari kita jadikan ia proses tak segerak dengan mudah.

Sebagai titik, tetapkan URL ke Titik Akhir + "/issueToken" seperti yang disahkan dalam Azure, dan tetapkan KEY 1 yang diperoleh dengan "Ocp-Apim-Subscription-Key" sebagai kunci dalam pengepala yang akan dihantar.

Sebagai tindak balas, rentetan token akses boleh diperolehi seperti itu, jadi ia digunakan sebagai nilai pulangan. Dengan cara ini, token akses ini hanya sah selama 10 minit.

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

Akses API untuk terjemahan teks (MainWindow.xaml.cs)

Ini juga dibuat menjadi kaedah untuk menjadikannya mudah digunakan. Hujah-hujah membolehkan anda menentukan token akses yang anda dapat dan teks untuk diterjemahkan, dan bahasa mana yang akan ditukar ke bahasa mana.

Ambil perhatian bahawa URL yang anda akses adalah berbeza daripada URL tempat anda memperoleh token. Teks dan bahasa yang akan diterjemahkan dihantar sebagai rentetan pertanyaan dalam URL, jadi lepaskan mereka menggunakan "Uri.EscapeDataString" terlebih dahulu.

Kaedah GET kemudian menghantar Kebenaran Pengepala dengan skema "Bearer" dan token dalam parameter.

Oleh kerana respons diambil dalam format XML, XDocument digunakan untuk mendapatkan semula teks yang diterjemahkan di dalamnya. Walau bagaimanapun, jika teks mengandungi aksara melarikan diri XML, mungkin kerana anda menggunakan XML, mereka mungkin masih melarikan diri. Tukarkannya mengikut keperluan.

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

Proses pelaksanaan butang (MainWindow.xaml.cs)

Sebaik sahaja anda telah melaksanakan dua kaedah, yang perlu anda lakukan ialah memanggil setiap satu. Anda boleh menterjemahkan teks dengan menetapkan KEY1 dan menentukan nilai yang dimasukkan untuk setiap kaedah. Oleh kerana ia adalah proses tak segerak, sila tambahkan async ke kaedah pengendalian butang.

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

Senarai bahasa yang boleh diterjemah

Anda mungkin mahu merujuk kepada halaman Micorsoft berikut: Oleh kerana ia adalah salah satu perkhidmatan awan, ia boleh diubah pada bila-bila masa.