अनुवादक पाठ API का उपयोग करके पाठ का प्रोग्रामेटिक रूप से अनुवाद करें

पेज निर्माण की तारीख :

पहले से क्या करें तैयारी

पहले से ही कोई Microsoft Azure खाता बनाएँ। इस पृष्ठ पर निर्माण प्रक्रिया का वर्णन किया गया है.

इसके अलावा, इस बार हम मुफ्त संस्करण के साथ पंजीकृत होंगे, इसलिए यदि आप भुगतान किए गए संस्करण का उपयोग करना चाहते हैं तो कृपया इसे समय पर बदलें।

API संसाधन बनाएँ

Microsoft Azure पोर्टल खोलें और बाएँ मेनू में नया क्लिक करें.

「新規」をクリック

विस्तारित मेनू से इंटेलिजेंस + Analytics का चयन करें।

「Intelligence + analytics」を選択

विस्तारित मेनू से, संज्ञानात्मक सेवाएँ APIs (पूर्वावलोकन) का चयन करें।

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

जब निर्माण स्क्रीन दिखाई देती है, तो अपनी पसंद का एक नाम दर्ज करें (यह डैशबोर्ड पर प्रदर्शन नाम होगा) और सदस्यता के लिए "नि: शुल्क परीक्षण" चुनें। उसके बाद API प्रकारक्लिक करें।

API type をクリック

APIs की सूची से अनुवादक पाठ API का चयन करें।

「Translator Text API」を選択

फिर मूल्य निर्धारण टियर का चयन करें।

Pricing tier を選択

चूंकि आप मुफ्त संस्करण का उपयोग कर रहे हैं, इसलिए "F0 Free" पर क्लिक करें और "चुनें" बटन पर क्लिक करें। नि: शुल्क संस्करण प्रति माह 2 मिलियन वर्णों तक परिवर्तित कर सकता है।

「F0 Free」を選択

यदि आप पहली बार कोई सेवा पंजीकृत कर रहे हैं, तो एक नया संसाधन समूह बनाएँ। आप अपने द्वारा बनाए गए संसाधनों को किसी भी नाम के समूहों में समूहीकृत कर सकते हैं.

एक स्थान एक सेवा डालने के लिए एक जगह है। जब मुख्य रूप से जापान में विकसित होता है, तो यह प्रदर्शन में सुधार करने की अधिक संभावना है यदि इसे जापान में स्थापित किया जाता है।

अंत में, "डैशबोर्ड पर पिन करें" की जाँच करें और "बनाएँ" बटन पर क्लिक करें।

作成

डैशबोर्ड में वह संसाधन है जिसे आपने पहले बनाया था, इसलिए इसे खोलने के लिए इसे क्लिक करें।

リソースを開く

मुझे लगता है कि अवलोकन खुला है, इसलिए दाईं ओर "समापन बिंदु" के लिए यूआरएल की जांच करें। यह एपीआई का URL है जिसे पहले प्रमाणीकरण द्वारा एक्सेस किया जाना चाहिए। हालांकि, यह शायद ही कभी बदलता है, और यह कार्यक्रम में वर्णित है कि मैं बाद में पेश करूंगा, इसलिए यह याद रखना अच्छा है कि यह समय के लिए यहां है।

Endpoint

मेनू से कुंजियों का चयन करें.

「Keys」を選択

प्रकट होता है जो कुंजी 1 का एक नोट बनाएँ और इसे प्रमाणित करने के लिए उपयोग करें। मुझे लगता है कि दो चाबियाँ होने शायद एक आरक्षित है. वैसे, यदि कुंजी किसी कारण से बाहर की ओर लीक हो जाती है, तो आप इसे ऊपर "पुन: उत्पन्न करें ..." के साथ फिर से बना सकते हैं।

「KEY 1」をメモ

यह Azure पक्ष पर सेटअप समाप्त करता है।

पाठ का अनुवाद करने के लिए API तक प्रोग्रामेटिक रूप से पहुँचें

अब यह वास्तव में एक प्रोग्राम बनाने का समय है ताकि आप पाठ का अनुवाद कर सकें। एक WPF अनुप्रयोग बनाने के लिए और इस तरह दिखता है एक स्क्रीन बनाने के लिए Visual Studio 2015 का उपयोग करें:

से, और भाषा में पाठ दर्ज करें, यह दर्ज करें कि आप किस भाषा को किस भाषा में कनवर्ट करना चाहते हैं. और यदि आप "कन्वर्ट रन" बटन पर क्लिक करते हैं, तो आप नीचे दिए गए "गंतव्य" में अनुवादित पाठ देख पाएंगे।

XAML (MainWindow.xaml)

यह सीधे अनुवाद को प्रभावित नहीं करता है, इसलिए केवल कोड शामिल है।

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

पहुँच टोकन प्राप्त करें (MainWindow.xaml.cs)

पाठ अनुवाद के लिए मूल प्रवाह निम्नानुसार है:

  1. एक पहुँच टोकन प्राप्त करने के लिए एपीआई में कुंजी 1 फेंक दें।
  2. अनुवादित पाठ प्राप्त करने के लिए पाठ को अनुवाद सेवा में फेंकने के लिए पहुँच टोकन का उपयोग करें.
  3. यदि आवश्यक हो तो पुन: पहुँच टोकन प्राप्त करें

यह करने के लिए आता है।

सबसे पहले, आइए एक एक्सेस टोकन प्राप्त करने और इसका उपयोग करना आसान बनाने के लिए एक विधि को परिभाषित करें। यदि आप तर्क के रूप में पहले प्राप्त कुंजी 1 पास करते हैं, तो आप एक्सेस टोकन प्राप्त कर सकते हैं। यह तुल्यकालिक प्रसंस्करण द्वारा भी प्राप्त किया जा सकता है, लेकिन चूंकि सी # 5.0 एसिंक / प्रतीक्षा का उपयोग किया जा सकता है, आइए इसे आसानी से एक अतुल्यकालिक प्रक्रिया बनाएं।

एक बिंदु के रूप में, URL को समापन बिंदु + "/issueToken" पर सेट करें जैसा कि Azure में पुष्टि की गई है, और भेजे जाने वाले शीर्ष लेख में कुंजी के रूप में "Ocp-Apim-Subscription-Key" के साथ प्राप्त KEY 1 सेट करें।

एक प्रतिक्रिया के रूप में, एक्सेस टोकन की स्ट्रिंग को प्राप्त किया जा सकता है जैसा कि यह है, इसलिए इसका उपयोग रिटर्न मूल्य के रूप में किया जाता है। वैसे, यह एक्सेस टोकन केवल 10 मिनट के लिए मान्य है।

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

पाठ अनुवाद के लिए API तक पहुँचें (MainWindow.xaml.cs)

इसे उपयोग में आसान बनाने के लिए एक विधि में भी बनाया गया है। तर्क आपको प्राप्त होने वाले एक्सेस टोकन और अनुवाद करने के लिए पाठ को निर्दिष्ट करने की अनुमति देते हैं, और किस भाषा को किस भाषा में कनवर्ट करना है।

ध्यान दें कि आपके द्वारा एक्सेस किया गया URL उस URL से भिन्न है जहाँ आपने टोकन प्राप्त किया था. अनुवाद ति किए जाने वाले पाठ और भाषा को URL में क्वेरी स्ट्रिंग के रूप में भेजा जाता है, इसलिए अग्रिम में "Uri.EscapeDataString" का उपयोग करके उनसे बचें।

GET विधि तब स्कीमा "बियरर" और पैरामीटर में टोकन के साथ शीर्ष लेख का प्राधिकरण भेजता है।

चूंकि प्रतिक्रिया XML प्रारूप में ली जाती है, इसलिए XDocument का उपयोग अनुवादित पाठ को अंदर पुनः प्राप्त करने के लिए किया जाता है। हालाँकि, यदि पाठ में XML एस्केप वर्ण हैं, तो शायद इसलिए कि आप XML का उपयोग कर रहे हैं, तो वे बच सकते हैं. इसे आवश्यकतानुसार कनवर्ट करें।

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

बटन निष्पादन प्रक्रिया (MainWindow.xaml.cs)

एक बार जब आप दो तरीकों को लागू कर लेते हैं, तो आपको बस इतना करना है कि प्रत्येक को कॉल करें। आप KEY1 सेट करके और प्रत्येक विधि के लिए दर्ज किए गए मान को निर्दिष्ट करके पाठ का अनुवाद कर सकते हैं. चूंकि यह एक अतुल्यकालिक प्रक्रिया है, इसलिए कृपया बटन हैंडलिंग विधि में एसिंक जोड़ें।

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

अनुवाद योग्य भाषाओं की सूची

आप निम्न Micorsoft पृष्ठों को संदर्भित करने के लिए कर सकते हैं: चूंकि यह क्लाउड सेवाओं में से एक है, इसलिए इसे किसी भी समय बदला जा सकता है।