Μετάφραση κειμένου μέσω προγραμματισμού με χρήση του API κειμένου μεταφραστή

Ημερομηνία δημιουργίας σελίδας :

Τι να προετοιμάσετε εκ των προτέρων

Δημιουργήστε έναν λογαριασμό Microsoft Azure εκ των προτέρων. Η διαδικασία δημιουργίας περιγράφεται σε αυτήν τη σελίδα.

Επίσης, αυτή τη φορά θα εγγραφούμε στη δωρεάν έκδοση, οπότε αλλάξτε την εγκαίρως εάν θέλετε να χρησιμοποιήσετε την πληρωμένη έκδοση.

Δημιουργία πόρων API

Ανοίξτε την πύλη Microsoft Azure και κάντε κλικ στην επιλογή Δημιουργία στο αριστερό μενού.

「新規」をクリック

Επιλέξτε Ευφυΐα + Analytics από το αναπτυγμένο μενού.

「Intelligence + analytics」を選択

Από το αναπτυγμένο μενού, επιλέξτε API γνωστικών υπηρεσιών (Προεπισκόπηση).

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

Όταν εμφανιστεί η οθόνη δημιουργίας, εισαγάγετε ένα όνομα της επιλογής σας (θα είναι το εμφανιζόμενο όνομα στον πίνακα ελέγχου) και επιλέξτε "Δωρεάν δοκιμή" για τη συνδρομή. Στη συνέχεια, κάντε κλικ στην επιλογή Τύπος API.

API type をクリック

Επιλέξτε API κειμένου μεταφραστή από τη λίστα των API.

「Translator Text API」を選択

Στη συνέχεια, επιλέξτε Επίπεδο τιμολόγησης.

Pricing tier を選択

Δεδομένου ότι χρησιμοποιείτε τη δωρεάν έκδοση, κάντε κλικ στο "F0 Free" και κάντε κλικ στο κουμπί "Επιλογή". Η δωρεάν έκδοση μπορεί να μετατρέψει έως και 2 εκατομμύρια χαρακτήρες ανά μήνα.

「F0 Free」を選択

Εάν καταχωρείτε μια υπηρεσία για πρώτη φορά, δημιουργήστε μια νέα ομάδα πόρων. Μπορείτε να ομαδοποιήσετε τους πόρους που δημιουργείτε σε ομάδες οποιουδήποτε ονόματος.

Μια τοποθεσία είναι ένα μέρος για να τοποθετήσετε μια υπηρεσία. Όταν αναπτύσσεται κυρίως στην Ιαπωνία, είναι πιο πιθανό να βελτιώσει την απόδοση εάν είναι εγκατεστημένο σε μια Ιαπωνία.

Τέλος, επιλέξτε "Καρφίτσωμα στον πίνακα ελέγχου" και κάντε κλικ στο κουμπί "Δημιουργία".

作成

Ο πίνακας εργαλείων έχει τον πόρο που δημιουργήσατε νωρίτερα, επομένως κάντε κλικ σε αυτόν για να τον ανοίξετε.

リソースを開く

Νομίζω ότι η επισκόπηση είναι ανοιχτή, οπότε ελέγξτε τη διεύθυνση URL για το "Endpoint" στα δεξιά. Αυτή είναι η διεύθυνση URL του API στην οποία θα πρέπει πρώτα να αποκτήσετε πρόσβαση μέσω ελέγχου ταυτότητας. Ωστόσο, σπάνια αλλάζει και περιγράφεται στο πρόγραμμα που θα παρουσιάσω αργότερα, οπότε είναι καλό να θυμόμαστε ότι είναι εδώ προς το παρόν.

Endpoint

Επιλέξτε Πλήκτρα από το μενού.

「Keys」を選択

Σημειώστε το KEY 1 που εμφανίζεται και χρησιμοποιήστε το για έλεγχο ταυτότητας. Νομίζω ότι έχοντας δύο κλειδιά είναι πιθανώς ένα αποθεματικό. Παρεμπιπτόντως, εάν το κλειδί διαρρεύσει προς τα έξω για κάποιο λόγο, μπορείτε να το αναδημιουργήσετε με το "Regenerate..." παραπάνω.

「KEY 1」をメモ

Αυτό ολοκληρώνει τη ρύθμιση στην πλευρά Azure.

Πρόσβαση μέσω προγραμματισμού στο API για τη μετάφραση κειμένου

Τώρα ήρθε η ώρα να δημιουργήσετε πραγματικά ένα πρόγραμμα, ώστε να μπορείτε να μεταφράσετε το κείμενο. Χρησιμοποιήστε το Visual Studio 2015 για να δημιουργήσετε μια εφαρμογή WPF και να δημιουργήσετε μια οθόνη που μοιάζει με αυτό:

Εισαγάγετε κείμενο στην περιοχή Από και στην επιλογή Γλώσσα, εισαγάγετε τη γλώσσα που θέλετε να μετατρέψετε σε ποια γλώσσα. Και αν κάνετε κλικ στο κουμπί "Μετατροπή εκτέλεσης", θα μπορείτε να δείτε το μεταφρασμένο κείμενο στον "Προορισμό" παρακάτω.

XAML (Κύριο Παράθυρο.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. Ρίξτε το KEY 1 στο API για να αποκτήσετε ένα διακριτικό πρόσβασης.
  2. Χρησιμοποιήστε το διακριτικό πρόσβασης για να πετάξετε το κείμενο στην υπηρεσία μετάφρασης για να λάβετε το μεταφρασμένο κείμενο.
  3. Αποκτήστε ξανά το διακριτικό πρόσβασης, εάν χρειάζεται

Έρχεται να.

Πρώτον, ας ορίσουμε μια μέθοδο για να αποκτήσετε ένα διακριτικό πρόσβασης και να το κάνετε εύκολο στη χρήση. Εάν περάσετε το KEY 1 που αποκτήθηκε νωρίτερα ως όρισμα, μπορείτε να λάβετε το διακριτικό πρόσβασης. Μπορεί επίσης να ληφθεί με σύγχρονη επεξεργασία, αλλά δεδομένου ότι το C# 5.0 async/await μπορεί να χρησιμοποιηθεί, ας το κάνουμε μια ασύγχρονη διαδικασία εύκολα.

Ως σημείο, ορίστε τη διεύθυνση URL σε Endpoint + "/issueToken" όπως επιβεβαιώθηκε στο Azure και ορίστε το KEY 1 που αποκτήθηκε με το "Ocp-Apim-Subscription-Key" ως το κλειδί στην κεφαλίδα που θα σταλεί.

Ως απάντηση, η συμβολοσειρά του διακριτικού πρόσβασης μπορεί να ληφθεί ως έχει, επομένως χρησιμοποιείται ως τιμή επιστροφής. Παρεμπιπτόντως, αυτό το διακριτικό πρόσβασης ισχύει μόνο για 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 στέλνει την εξουσιοδότηση της κεφαλίδας με το σχήμα "Bearer" και το διακριτικό στην παράμετρο.

Δεδομένου ότι η απόκριση λαμβάνεται σε μορφή 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 και καθορίζοντας την τιμή που έχετε εισαγάγει για κάθε μέθοδο. Δεδομένου ότι πρόκειται για μια ασύγχρονη διαδικασία, προσθέστε 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);
}

Κατάλογος μεταφράσιμων γλωσσών

Μπορεί να θέλετε να ανατρέξετε στις ακόλουθες σελίδες της Micorsoft: Δεδομένου ότι είναι μία από τις υπηρεσίες cloud, μπορεί να αλλάξει ανά πάσα στιγμή.