こんにちは、Michaelです。
前回、Microsoftの「Bot Framework」を使って、簡単な「オウム返しBot」を作成しました。今回は、オウム返しBotにTranslator Text APIを付け加え、入力した言葉を外国語に翻訳するBotを作っていきます。
Translator Text APIによる翻訳機能の作成
Translator Text APIについては以前、Pythonによる簡易的な実装をご紹介しました。今回のBot FrameworkはNode.jsを使用しているため、コードをNode.jsに変更して対応させる必要があります。
基本的なリクエストは言語によって変わるわけではないため、以下のようなコードで翻訳機能を作成してみました。今回は、諸国語を英語に変換するように設定しています。
・translator.js
var request = require('request');
function get_token(key, callback){
//リクエストヘッダ
var headers = {
'Content-Type': 'application/jwt',
'Ocp-Apim-Subscription-Key': key
};
//オプションの定義
var options = {
url: 'https://api.cognitive.microsoft.com/sts/v1.0/issueToken',
method: 'POST',
headers: headers,
json: true,
};
//リクエスト送信
request(options, function (error, response, body) {
//console.log(body);
callback(body);
});
};
function translate(text, language, callback){
//APIキー設定
var api_key = '*****{APIキー}';
gettoken(apikey, function(token){
//リクエストヘッダ
var headers = {
'Authorization': 'Bearer ' + token
};
//クエリ
var query = {
'to': language,
'text': text
};
//オプションの定義
var options = {
url: 'https://api.microsofttranslator.com/V2/Http.svc/Translate',
qs: query,
method: 'GET',
headers: headers,
json: true
};
//リクエスト送信
request(options, function (error, response, body) {
//タグの除去
body = body.replace(/|/g, '')
callback(body);
});
});
};
// 入力テキスト
var raw_text = 'Wo ist die toilette?';
// 翻訳先言語設定('en': 英語)
var lang = 'en'
translate(rawtext, lang, function(transtext){
console.log(trans_text);
});
試しにこれをNode.jsで動かしてみると、ドイツ語の「Wo ist die Toilette? (トイレはどこですか?)」が「Where is the toilet?」と英語に翻訳されました。
翻訳Botの作成とテスト
翻訳機能ができたので前回作成したオウム返しBotに翻訳機能を移植します。
作成した翻訳用の関数をオウム返しBotにペーストして、メッセージの処理部分に翻訳関数を組み込みました。
translator_bot.js
var restify = require('restify');
var builder = require('botbuilder');
var request = require('request');
//=========================================================
// Translator Text API
//=========================================================
function get_token(key, callback){
//リクエストヘッダ
var headers = {
'Content-Type': 'application/jwt',
'Ocp-Apim-Subscription-Key': key
};
//オプションの定義
var options = {
url: 'https://api.cognitive.microsoft.com/sts/v1.0/issueToken',
method: 'POST',
headers: headers,
json: true,
};
//リクエスト送信
request(options, function (error, response, body) {
//console.log(body);
callback(body);
});
};
function translate(text, language, callback){
//APIキー設定
var api_key = '*****{APIキー}';
gettoken(apikey, function(token){
//リクエストヘッダ
var headers = {
'Authorization': 'Bearer ' + token
};
//クエリ
var query = {
'to': language,
'text': text
};
//オプションの定義
var options = {
url: 'https://api.microsofttranslator.com/V2/Http.svc/Translate',
qs: query,
method: 'GET',
headers: headers,
json: true
};
//オプションの定義
request(options, function (error, response, body) {
//タグの除去
body = body.replace(/|/g, '')
callback(body);
});
});
};
//=========================================================
// Bot Setup
//=========================================================
// APIサーバーの作成
var server = restify.createServer();
server.listen(process.env.port || process.env.PORT || 3978, function () {
console.log('%s listening to %s', server.name, server.url);
});
// Chat botの作成
var connector = new builder.ChatConnector({
appId: process.env.MICROSOFTAPPID,
appPassword: process.env.MICROSOFTAPPPASSWORD
});
var bot = new builder.UniversalBot(connector);
server.post('/api/messages', connector.listen());
//=========================================================
// Bots Dialogs
//=========================================================
// メッセージの処理
bot.dialog('/', function (session) {
//session.send(session.message.text)
// 入力テキスト
var raw_text = session.message.text
// 翻訳先言語設定('en': 英語)
var lang = 'en'
translate(rawtext, lang, function(transtext){
//console.log(trans_text);
session.send(lang + ': ' + trans_text);
});
});
ローカル環境のNode.jsで動作を確認してみます。
Bot Framework Emulatorで翻訳Botにテキストを送信してみると、日本語、ドイツ語とも英語に変換されていることが確認できました。
言語設定を「de (ドイツ語)」に変更すると、ドイツ語に翻訳するように変更することもできます。
また、メッセージの処理部分を少し変更し、記号を使って翻訳先の言語を指定できるようにしてみました。Translator Text APIは入力した言語を自動で判別できるため、知らない国の言葉を指定の言語に翻訳できるBotを作ることもできました。
Bot Framework自体はルールベースの応答プログラムであるため、Cognitive ServicesのAPIを組み合わせることで、簡単に機能の追加をすることができます。
次回は、作成したBot ApplicationをAzure Bot Serviceにデプロイしてみます。
お楽しみに。