Программный перевод текста с помощью API переводчика текста
Что приготовить заранее
Заранее создайте учетную запись Microsoft Azure. Процедура создания описана на этой странице.
Кроме того, на этот раз мы зарегистрируемся с бесплатной версией, поэтому, пожалуйста, измените ее своевременно, если вы хотите использовать платную версию.
Создание ресурсов API
Откройте портал Microsoft Azure и щелкните Создать в меню слева.
Выберите Интеллект + Аналитика в развернутом меню.
В развернутом меню выберите API Cognitive Services (предварительная версия).
Когда появится экран создания, введите имя по вашему выбору (это будет отображаемое имя на панели инструментов) и выберите «Бесплатная пробная версия» для подписки. Затем щелкните Тип API.
Выберите API перевода текста из списка API.
Затем выберите Ценовая категория.
Поскольку вы используете бесплатную версию, нажмите «F0 Free» и нажмите кнопку «Выбрать». Бесплатная версия может конвертировать до 2 миллионов символов в месяц.
Если служба регистрируется впервые, создайте новую группу ресурсов. Созданные ресурсы можно сгруппировать в группы с любым именем.
Местоположение - это место, где можно разместить услугу. При разработке в основном в Японии, он с большей вероятностью улучшит производительность, если он установлен в Японии.
Наконец, установите флажок «Закрепить на панели инструментов» и нажмите кнопку «Создать».
Панель мониторинга содержит ресурс, созданный ранее, поэтому щелкните его, чтобы открыть.
Я думаю, что обзор открыт, поэтому проверьте URL-адрес «Конечная точка» справа. Это URL-адрес API, к которому сначала должна быть получена проверка подлинности. Тем не менее, он редко меняется, и он описан в программе, которую я представлю позже, поэтому хорошо помнить, что он здесь на данный момент.
Выберите в меню пункт Ключи.
Запишите появившийся КЛЮЧ 1 и используйте его для проверки подлинности. Я думаю, что наличие двух ключей, вероятно, является резервом. Кстати, если ключ по каким-то причинам просачивается наружу, вы можете воссоздать его с помощью «Regenerate...» выше.
На этом установка завершается на стороне Azure.
Программный доступ к API для перевода текста
Теперь пришло время фактически создать программу, чтобы вы могли перевести текст. Используйте Visual Studio 2015 для создания приложения WPF и создания экрана, который выглядит следующим образом:
Введите текст в поле От, а в поле Язык введите язык, на который вы хотите перейти. И если вы нажмете на кнопку «Конвертировать прогон», вы сможете увидеть переведенный текст в «Пункте назначения» ниже.
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)
Основной поток для перевода текста выглядит следующим образом:
- Добавьте KEY 1 в API, чтобы получить маркер доступа.
- Используйте маркер доступа, чтобы отправить текст в службу перевода, чтобы получить переведенный текст.
- При необходимости снова получите маркер доступа
Дело доходит до того, что.
Во-первых, давайте определим метод получения маркера доступа и сделаем его простым в использовании. Если в качестве аргумента передать полученный ранее KEY 1, можно получить маркер доступа. Он также может быть получен синхронной обработкой, но поскольку C# 5.0 async/await можно использовать, давайте сделаем его асинхронным процессом легко.
В качестве точки задайте URL-адрес Endpoint + "/issueToken", как это подтверждено в Azure, и задайте КЛЮЧ 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 отправляет Authorization of the Header со схемой "Bearer" и маркером в параметре.
Поскольку ответ принимается в формате XML, XDocument используется для извлечения переведенного текста внутри. Однако если текст содержит escape-символы 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: Поскольку это один из облачных сервисов, он может быть изменен в любое время.