Bot FrameworkとTranslator Text APIを使って簡単な翻訳Botを作ってみる ② 機能追加編

こんにちは、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を作ることもできました。

今回は、Translator Text APIを付け加え、簡易的な翻訳Botを作成してみました。

Bot Framework自体はルールベースの応答プログラムであるため、Cognitive ServicesのAPIを組み合わせることで、簡単に機能の追加をすることができます。

次回は、作成したBot ApplicationをAzure Bot Serviceにデプロイしてみます。

お楽しみに。

この記事を書いた人

azure-recipe-user