Programowe tłumaczenie tekstu przy użyciu interfejsu API tłumaczenia tekstu w usłudze Translator
Co przygotować z wyprzedzeniem
Utwórz wcześniej konto Microsoft Azure. Procedura tworzenia jest opisana na tej stronie.
Również tym razem zarejestrujemy się w wersji darmowej, więc zmień ją w odpowiednim czasie, jeśli chcesz korzystać z wersji płatnej.
Tworzenie zasobów interfejsu API
Otwórz witrynę Microsoft Azure Portal i kliknij pozycję Nowy w menu po lewej stronie.
Wybierz Intelligence + Analytics z rozwiniętego menu.
Z rozwiniętego menu wybierz pozycję Interfejsy API usług Cognitive Services (wersja zapoznawcza).
Gdy pojawi się ekran tworzenia, wprowadź wybraną nazwę (będzie to nazwa wyświetlana na pulpicie nawigacyjnym) i wybierz "Bezpłatna wersja próbna" dla subskrypcji. Następnie kliknij Typ interfejsu API.
Wybierz pozycję Interfejs API tłumaczenia tekstu w usłudze Translator z listy interfejsów API.
Następnie wybierz pozycję Warstwa cenowa.
Ponieważ korzystasz z bezpłatnej wersji, kliknij "F0 Free" i kliknij przycisk "Wybierz". Darmowa wersja może konwertować do 2 milionów znaków miesięcznie.
Jeśli rejestrujesz usługę po raz pierwszy, utwórz nową grupę zasobów. Utworzone zasoby można grupować w grupy o dowolnej nazwie.
Lokalizacja to miejsce, w którym można umieścić usługę. Podczas opracowywania głównie w Japonii jest bardziej prawdopodobne, że poprawi się wydajność, jeśli zostanie zainstalowany w Japonii.
Na koniec zaznacz "Przypnij do pulpitu nawigacyjnego" i kliknij przycisk "Utwórz".
Pulpit nawigacyjny zawiera utworzony wcześniej zasób, więc kliknij go, aby go otworzyć.
Myślę, że Przegląd jest otwarty, więc sprawdź adres URL "Endpoint" po prawej stronie. Jest to adres URL interfejsu API, do którego należy najpierw uzyskać dostęp przez uwierzytelnianie. Rzadko się to jednak zmienia, a jest to opisane w programie, który przedstawię później, więc dobrze jest pamiętać, że jest tutaj na razie.
Wybierz Klucze z menu.
Zanotuj wyświetlony klucz 1 i użyj go do uwierzytelnienia. Myślę, że posiadanie dwóch kluczy jest prawdopodobnie rezerwą. Nawiasem mówiąc, jeśli klucz z jakiegoś powodu wycieknie na zewnątrz, możesz go odtworzyć za pomocą "Regeneruj ..." powyżej.
To kończy konfigurację po stronie platformy Azure.This concludes the setup on the Azure side.
Programowy dostęp do interfejsu API w celu tłumaczenia tekstu
Teraz nadszedł czas, aby stworzyć program, aby móc przetłumaczyć tekst. Użyj programu Visual Studio 2015, aby utworzyć aplikację WPF i utworzyć ekran, który wygląda tak:
Wprowadź tekst w polu Od, a w polu Język wprowadź język, który chcesz przekonwertować na który język. A jeśli klikniesz przycisk "Konwertuj uruchom", będziesz mógł zobaczyć przetłumaczony tekst w "Miejscu docelowym" poniżej.
XAML (MainWindow.xaml)
Nie wpływa to bezpośrednio na tłumaczenie, więc dołączony jest tylko kod.
<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>
Pobierz token dostępu (MainWindow.xaml.cs)
Podstawowy przepływ tłumaczenia tekstu jest następujący:
- Wrzuć KEY 1 do interfejsu API, aby uzyskać token dostępu.
- Użyj tokenu dostępu, aby przesłać tekst do usługi tłumaczeniowej w celu uzyskania przetłumaczonego tekstu.
- W razie potrzeby ponownie uzyskaj token dostępu
Chodzi o to.
Najpierw zdefiniujmy metodę uzyskania tokenu dostępu i ułatw jego użycie. Jeśli przekażesz KLUCZ 1 uzyskany wcześniej jako argument, możesz uzyskać token dostępu. Można go również uzyskać przez przetwarzanie synchroniczne, ale ponieważ można użyć Async/await C# 5.0, uczyńmy go łatwo procesem asynchronicznym.
W zamian ustaw adres URL na Endpoint + "/issueToken" zgodnie z potwierdzeniem na platformie Azure i ustaw KLUCZ 1 uzyskany za pomocą "Ocp-Apim-Subscription-Key" jako klucza w nagłówku, który ma zostać wysłany.
W odpowiedzi ciąg tokenu dostępu można uzyskać w niezmienionej postaci, dlatego jest on używany jako wartość zwracana. Nawiasem mówiąc, ten token dostępu jest ważny tylko przez 10 minut.
<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;
}
}
}
Dostęp do interfejsu API do tłumaczenia tekstu (MainWindow.xaml.cs)
Jest to również metoda ułatwiająca korzystanie z niej. Argumenty umożliwiają określenie otrzymanego tokenu dostępu i tekstu do przetłumaczenia oraz języka do przekonwertowania na jaki język.
Pamiętaj, że adres URL, do którego uzyskujesz dostęp, różni się od adresu URL, pod którym uzyskano token. Tekst i język do przetłumaczenia są wysyłane jako ciąg zapytania w adresie URL, więc ucieknij z nich za pomocą "Uri.EscapeDataString" z wyprzedzeniem.
Następnie metoda GET wysyła autoryzację nagłówka ze schematem "Bearer" i tokenem w parametrze.
Ponieważ odpowiedź jest pobierana w formacie XML, XDocument służy do pobierania przetłumaczonego tekstu wewnątrz. Jeśli jednak tekst zawiera znaki ucieczki XML, być może dlatego, że używasz XML, mogą one pozostać znakiem ucieczki. Przekonwertuj go w razie potrzeby.
<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;
}
}
}
Proces wykonywania przycisków (MainWindow.xaml.cs)
Po wdrożeniu dwóch metod wszystko, co musisz zrobić, to wywołać każdą z nich. Tekst można przetłumaczyć, ustawiając KEY1 i określając wprowadzoną wartość dla każdej metody. Ponieważ jest to proces asynchroniczny, dodaj asynchroniczny do metody obsługi przycisków.
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);
}
Lista języków, które można przetłumaczyć
Możesz odwołać się do następujących stron Micorsoft: Ponieważ jest to jedna z usług w chmurze, można ją zmienić w dowolnym momencie.