こんにちは、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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
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キー}'; get_token(api_key, 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(/<(.+?)>|<\/string>/g, '') callback(body); }); }); }; // 入力テキスト var raw_text = 'Wo ist die toilette?'; // 翻訳先言語設定('en': 英語) var lang = 'en' translate(raw_text, lang, function(trans_text){ console.log(trans_text); }); |
試しにこれをNode.jsで動かしてみると、ドイツ語の「Wo ist die Toilette? (トイレはどこですか?)」が「Where is the toilet?」と英語に翻訳されました。
翻訳Botの作成とテスト
翻訳機能ができたので前回作成したオウム返しBotに翻訳機能を移植します。
作成した翻訳用の関数をオウム返しBotにペーストして、メッセージの処理部分に翻訳関数を組み込みました。
translator_bot.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
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キー}'; get_token(api_key, 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(/<(.+?)>|<\/string>/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.MICROSOFT_APP_ID, appPassword: process.env.MICROSOFT_APP_PASSWORD }); 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(raw_text, lang, function(trans_text){ //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にデプロイしてみます。
お楽しみに。