Programiškai išverskite tekstą naudodami vertėjo teksto API

Puslapio sukūrimo data :

Ką paruošti iš anksto

Iš anksto sukurkite "Microsoft Azure" paskyrą. Kūrimo procedūra aprašyta šiame puslapyje.

Be to, šį kartą mes užsiregistruosime nemokamoje versijoje, todėl prašome ją laiku pakeisti, jei norite naudoti mokamą versiją.

Sukurkite API išteklius

Atidarykite "Microsoft Azure" portalą ir kairiajame meniu spustelėkite Naujas.

「新規」をクリック

Išplėstiniame meniu pasirinkite "Intelligence" + "Analytics".

「Intelligence + analytics」を選択

Išplėstiniame meniu pasirinkite Kognityvinių paslaugų API (peržiūra).

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

Kai pasirodys kūrimo ekranas, įveskite pasirinktą pavadinimą (tai bus rodomas pavadinimas prietaisų skydelyje) ir pasirinkite "Nemokama bandomoji versija" prenumeratai. Tada spustelėkite API tipas.

API type をクリック

PASIRINKITE Vertėjo teksto API iš API sąrašo API.

「Translator Text API」を選択

Tada pasirinkite Kainodaros pakopa.

Pricing tier を選択

Kadangi naudojate nemokamą versiją, spustelėkite "F0 Free" ir spustelėkite mygtuką "Pasirinkti". Nemokama versija gali konvertuoti iki 2 milijonų simbolių per mėnesį.

「F0 Free」を選択

Jei tarnybą registruojate pirmą kartą, sukurkite naują išteklių grupę. Galite grupuoti sukurtus išteklius į bet kokio pavadinimo grupes.

Vieta yra vieta paslaugai teikti. Kuriant daugiausia Japonijoje, labiau tikėtina, kad jis pagerins našumą, jei jis bus įdiegtas Japonijoje.

Galiausiai pažymėkite "Prisegti prie prietaisų skydelio" ir spustelėkite mygtuką "Sukurti".

作成

Prietaisų skydelyje yra šaltinis, kurį sukūrėte anksčiau, todėl spustelėkite jį, kad atidarytumėte.

リソースを開く

Manau, kad apžvalga yra atvira, todėl dešinėje patikrinkite "Endpoint" URL. Tai yra API URL, kurį pirmiausia reikėtų pasiekti autentifikuojant. Tačiau jis retai keičiasi, ir jis aprašytas programoje, kurią pristatysiu vėliau, todėl pravartu prisiminti, kad kol kas jis yra čia.

Endpoint

Pasirinkite Raktai iš meniu.

「Keys」を選択

Užsirašykite rodomą KEY 1 ir naudokite ją autentifikuodami. Manau, kad turėti du raktus turbūt yra rezervas. Beje, jei raktas dėl kokių nors priežasčių nuteka į išorę, galite jį atkurti naudodami aukščiau esantį "Regenerate...".

「KEY 1」をメモ

Tai užbaigia sąranką "Azure" pusėje.

Programiškai pasiekite API, kad išverstumėte tekstą

Dabar atėjo laikas iš tikrųjų sukurti programą, kad galėtumėte išversti tekstą. Naudokite "Visual Studio 2015", kad sukurtumėte WPF programą ir sukurtumėte ekraną, kuris atrodytų taip:

Įveskite tekstą dalyje Nuo, o dalyje Kalba įveskite, kurią kalbą norite konvertuoti į kurią kalbą. Ir jei spustelėsite mygtuką "Konvertuoti vykdyti", išverstą tekstą galėsite pamatyti žemiau esančiame "Paskirties vietoje".

XAML (MainWindow.xaml)

Tai neturi tiesioginės įtakos vertimui, todėl įtraukiamas tik kodas.

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

Gaukite prieigos raktą (MainWindow.xaml.cs)

Pagrindinis teksto vertimo srautas yra toks:

  1. Įmeskite KEY 1 į API, kad gautumėte prieigos atpažinimo ženklą.
  2. Naudokite prieigos atpažinimo ženklą, kad permestumėte tekstą į vertimo tarnybą, kad gautumėte išverstą tekstą.
  3. Jei reikia, vėl gaukite prieigos atpažinimo ženklą

Jis ateina.

Pirmiausia apibrėžkime būdą, kaip gauti prieigos žetoną ir padaryti jį lengvą naudoti. Jei kaip argumentą perduosite anksčiau gautą KEY 1, galėsite gauti prieigos atpažinimo ženklą. Jį taip pat galima gauti naudojant sinchroninį apdorojimą, tačiau kadangi galima naudoti C# 5.0 async / laukimą, padarykime jį asinchroniniu procesu lengvai.

Kaip tašką, nustatykite URL į Endpoint + "/issueToken", kaip patvirtinta "Azure", ir nustatykite KEY 1, gautą su "Ocp-Apim-Subscription-Key", kaip raktą siunčiamoje antraštėje.

Kaip atsakymą, prieigos žetono eilutę galima gauti tokią, kokia ji yra, todėl ji naudojama kaip grįžtamoji vertė. Beje, šis prieigos žetonas galioja tik 10 minučių.

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

Pasiekite API teksto vertimui (MainWindow.xaml.cs)

Tai taip pat paverčiama metodu, kad jį būtų lengva naudoti. Argumentai leidžia nurodyti gautą prieigos atpažinimo ženklą ir tekstą, kurį norite išversti, ir kurią kalbą konvertuoti į kurią kalbą.

Atminkite, kad URL, kurį pasiekiate, skiriasi nuo URL, kuriame gavote prieigos raktą. Tekstas ir kalba, kuriuos reikia išversti, siunčiami kaip užklausos eilutė URL, todėl iš anksto venkite jų naudodami "Uri.EscapeDataString".

Tada GET metodas siunčia antraštės autorizaciją su schema "Nešėjas" ir raktą parametre.

Kadangi atsakymas daromas XML formatu, "XDocument" naudojamas išverstam tekstui gauti viduje. Tačiau jei tekste yra XML pabėgimo simbolių, galbūt dėl to, kad naudojate XML, jie gali likti pabėgę. Konvertuokite jį pagal poreikį.

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

Mygtuko vykdymo procesas (MainWindow.xaml.cs)

Įdiegę du metodus, tereikia paskambinti kiekvienam iš jų. Galite išversti tekstą nustatydami KEY1 ir nurodydami įvestą kiekvieno metodo reikšmę. Kadangi tai yra asinchroninis procesas, prie mygtukų tvarkymo metodo pridėkite async.

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

Verčiamų kalbų sąrašas

Galbūt norėsite peržiūrėti šiuos "Micorsoft" puslapius: Kadangi tai yra viena iš debesies paslaugų, ji gali būti bet kada pakeista.