번역기 텍스트 API를 사용하여 프로그래밍 방식으로 텍스트 번역
사전에 준비해야 할 사항
미리 Microsoft Azure 계정을 만듭니다. 생성 절차는 이 페이지에 설명되어 있습니다.
또한 이번에는 무료 버전으로 등록 할 예정이므로 유료 버전을 사용하려면 적시에 변경하십시오.
API 리소스 만들기
Microsoft Azure 포털을 열고 왼쪽 메뉴에서 새로 만들기를 클릭합니다.
확장된 메뉴에서 인텔리전스 + 분석을 선택합니다.
확장된 메뉴에서 코그너티브 서비스 API(미리 보기)를 선택합니다.
만들기 화면이 나타나면 원하는 이름(대시보드의 표시 이름)을 입력하고 구독에 대해 "무료 평가판"을 선택합니다. 그런 다음 API 유형을 클릭합니다.
API 목록에서 번역기 텍스트 API를 선택합니다.
그런 다음 가격 책정 계층을 선택합니다.
무료 버전을 사용하고 있으므로 "F0 무료"를 클릭하고 "선택"버튼을 클릭하십시오. 무료 버전은 한 달에 최대 2 백만 자까지 변환 할 수 있습니다.
서비스를 처음 등록하는 경우 새 리소스 그룹을 만듭니다. 만든 리소스를 모든 이름의 그룹으로 그룹화할 수 있습니다.
위치는 서비스를 제공하는 장소입니다. 일본에서 주로 개발할 때 일본에 설치하면 성능이 향상 될 가능성이 더 큽니다.
마지막으로 "대시 보드에 고정"을 선택하고 "만들기"버튼을 클릭하십시오.
대시보드에는 이전에 만든 리소스가 있으므로 클릭하여 엽니다.
개요가 열려 있다고 생각하므로 오른쪽의 "끝점"URL을 확인하십시오. 인증으로 먼저 액세스해야 하는 API의 URL입니다. 그러나 거의 변경되지 않으며 나중에 소개 할 프로그램에 설명되어 있으므로 당분간 여기에 있음을 기억하는 것이 좋습니다.
메뉴에서 키를 선택합니다.
나타나는 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)
텍스트 번역의 기본 흐름은 다음과 같습니다.
- KEY 1을 API에 던져 액세스 토큰을 가져옵니다.
- 액세스 토큰을 사용하여 텍스트를 번역 서비스로 던져 번역된 텍스트를 가져옵니다.
- 필요한 경우 액세스 토큰을 다시 가져옵니다.
에 온다.
먼저 액세스 토큰을 가져오고 사용하기 쉽게 만드는 방법을 정의해 보겠습니다. 이전에 얻은 KEY 1을 인수로 전달하면 액세스 토큰을 얻을 수 있습니다. 동기 처리로도 얻을 수 있지만 C # 5.0 비동기 / 대기를 사용할 수 있으므로 쉽게 비동기 프로세스로 만들어 보겠습니다.
요점은 Azure에서 확인한 대로 URL을 끝점 + "/issueToken"으로 설정하고 "Ocp-Apim-구독-키"를 사용하여 얻은 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 페이지를 참조할 수 있습니다. 클라우드 서비스 중 하나이기 때문에 언제든지 변경 될 수 있습니다.