Dịch văn bản theo lập trình bằng API Văn bản Dịch

Ngày tạo trang :

Những gì cần chuẩn bị trước

Tạo tài khoản Microsoft Azure trước. Quy trình tạo được mô tả trên trang này.

Ngoài ra, lần này chúng tôi sẽ đăng ký với phiên bản miễn phí, vì vậy vui lòng thay đổi nó một cách kịp thời nếu bạn muốn sử dụng phiên bản trả phí.

Tạo tài nguyên API

Mở cổng thông tin Microsoft Azure và nhấp vào Mới trong menu bên trái.

「新規」をクリック

Chọn Thông minh + Phân tích từ menu mở rộng.

「Intelligence + analytics」を選択

Từ menu mở rộng, hãy chọn API Dịch vụ nhận thức (Xem trước).

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

Khi màn hình tạo xuất hiện, hãy nhập tên bạn chọn (đó sẽ là tên hiển thị trên trang tổng quan) và chọn "Dùng thử miễn phí" cho đăng ký. Sau đó nhấp vào Loại API.

API type をクリック

Chọn API Văn bản Dịch từ danh sách API.

「Translator Text API」を選択

Sau đó, chọn Bậc giá.

Pricing tier を選択

Vì bạn đang sử dụng phiên bản miễn phí, hãy nhấp vào "F0 Free" và nhấp vào nút "Chọn". Phiên bản miễn phí có thể chuyển đổi tối đa 2 triệu ký tự mỗi tháng.

「F0 Free」を選択

Nếu bạn đang đăng ký một dịch vụ lần đầu tiên, hãy tạo một nhóm Nguồn lực mới. Bạn có thể nhóm các tài nguyên bạn tạo thành các nhóm có tên bất kỳ.

Một vị trí là một nơi để đặt một dịch vụ. Khi phát triển chủ yếu ở Nhật Bản, nó có nhiều khả năng cải thiện hiệu suất hơn nếu nó được lắp đặt tại Nhật Bản.

Cuối cùng, chọn "Ghim vào bảng điều khiển" và nhấp vào nút "Tạo".

作成

Bảng thông tin có tài nguyên bạn đã tạo trước đó, vì vậy hãy nhấp vào nó để mở nó.

リソースを開く

Tôi nghĩ rằng Tổng quan đang mở, vì vậy hãy kiểm tra URL cho "Điểm cuối" ở bên phải. Đây là URL của API nên được truy cập bằng xác thực trước tiên. Tuy nhiên, nó hiếm khi thay đổi, và nó được mô tả trong chương trình mà tôi sẽ giới thiệu sau, vì vậy thật tốt khi nhớ rằng nó ở đây trong thời điểm hiện tại.

Endpoint

Chọn Phím từ menu.

「Keys」を選択

Ghi lại KHÓA 1 xuất hiện và sử dụng nó để xác thực. Tôi nghĩ rằng có hai chìa khóa có lẽ là một dự trữ. Nhân tiện, nếu chìa khóa bị rò rỉ ra bên ngoài vì một số lý do, bạn có thể tạo lại nó bằng "Tái tạo..." ở trên.

「KEY 1」をメモ

Điều này kết thúc thiết lập ở phía Azure.

Truy cập lập trình vào API để dịch văn bản

Bây giờ là lúc để thực sự tạo ra một chương trình để bạn có thể dịch văn bản. Sử dụng Visual Studio 2015 để tạo ứng dụng WPF và tạo màn hình trông như thế này:

Nhập văn bản trong Từ và trong Ngôn ngữ, nhập ngôn ngữ bạn muốn chuyển đổi sang ngôn ngữ nào. Và nếu bạn nhấp vào nút "Chuyển đổi chạy", bạn sẽ có thể thấy văn bản đã dịch trong "Đích đến" bên dưới.

XAML (MainWindow.xaml)

Nó không ảnh hưởng trực tiếp đến bản dịch, vì vậy chỉ có mã được bao gồm.

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

Nhận Access Token (MainWindow.xaml.cs)

Quy trình cơ bản để dịch văn bản như sau:

  1. Ném KEY 1 vào API để nhận mã thông báo truy cập.
  2. Sử dụng mã truy cập để ném văn bản vào dịch vụ dịch để lấy văn bản đã dịch.
  3. Nhận lại mã truy cập nếu cần

Nó đến với.

Đầu tiên, hãy định nghĩa một phương thức để có được mã thông báo truy cập và làm cho nó dễ sử dụng. Nếu bạn vượt qua KEY 1 thu được trước đó làm đối số, bạn có thể nhận được mã thông báo truy cập. Nó cũng có thể thu được bằng cách xử lý đồng bộ, nhưng vì có thể sử dụng C # 5.0 async / await, hãy biến nó thành một quá trình không đồng bộ một cách dễ dàng.

Tại thời điểm, hãy đặt URL thành Điểm cuối + "/issueToken" như được xác nhận trong Azure và đặt KEY 1 thu được bằng "Ocp-Apim-Subscription-Key" làm khóa trong tiêu đề sẽ được gửi.

Là một phản hồi, chuỗi của mã thông báo truy cập có thể được lấy như hiện tại, vì vậy nó được sử dụng làm giá trị trả về. Nhân tiện, mã thông báo truy cập này chỉ có giá trị trong 10 phút.

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

Truy cập API để dịch văn bản (MainWindow.xaml.cs)

Điều này cũng được thực hiện thành một phương pháp để làm cho nó dễ sử dụng. Các đối số cho phép bạn chỉ định mã thông báo truy cập bạn nhận được và văn bản cần dịch và ngôn ngữ nào để chuyển đổi sang ngôn ngữ nào.

Lưu ý rằng URL bạn truy cập khác với URL nơi bạn lấy mã thông báo. Văn bản và ngôn ngữ cần dịch được gửi dưới dạng chuỗi truy vấn trong URL, vì vậy hãy thoát chúng trước bằng cách sử dụng "Uri.EscapeDataString".

Phương thức GET sau đó sẽ gửi Authorization of the Header với lược đồ "Bearer" và token trong tham số.

Vì phản hồi được thực hiện ở định dạng XML, XDocument được sử dụng để truy xuất văn bản đã dịch bên trong. Tuy nhiên, nếu văn bản chứa các ký tự thoát XML, có lẽ vì bạn đang sử dụng XML, chúng có thể vẫn bị thoát. Chuyển đổi nó khi cần thiết.

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

Quá trình thực thi nút (MainWindow.xaml.cs)

Khi bạn đã triển khai hai phương pháp, tất cả những gì bạn phải làm là gọi từng phương pháp. Bạn có thể dịch văn bản bằng cách đặt KEY1 và chỉ định giá trị đã nhập cho từng phương thức. Vì nó là một quá trình không đồng bộ, vui lòng thêm async vào phương thức xử lý nút.

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

Danh sách các ngôn ngữ có thể dịch

Bạn có thể muốn tham khảo các trang Micorsoft sau: Vì nó là một trong những dịch vụ đám mây, nó có thể được thay đổi bất cứ lúc nào.