こんにちは! ゆきぽんずです
色々ググってみましたが、hubotにLUISを組み込んでいる記事がなかったので自分で作ったプログラムを載せておきます
hubotとLUISを接続
結構簡単にhubotとLUISは接続できました
つまずきそうな部分があったので、そこについては解説していきます
とりあえず結果をどうぞ
こんな感じの結果が出力できました
そして作成したコードがこちらです
ソースコード
ファイル名 : hubotNaturalLanguageProcessing.js
このプログラムは簡単なようで全く簡単に作れませんでした
結構深い理解が必要でした
ひとつづつ解説していきます
文字列の変換
userComment = encodeURIComponent(msg.match[1]);
このコードでは文字コードをコンピュータが理解できるような文字列に変換しています
本来私たちが見ている文字は(”あ”)このような文字ですが、コンピュータが見ている文字というのは(”%5ECN”)このようなものです
ですので普通の文字列を入力してもコンピュータが理解をしてくれません
そこで上のコードのような変換式が必要となってきます
APIキーの取得
luisApiKey = process.env.HUBOT_LUIS_API_KEY;
こちらの扱い方については前の記事で説明しているのでそちらを参考にしてください
またLUISの扱い方については分かりやすい記事があったので、そちらのリンクを貼っておきます
URLの取得
luisURL = "https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/983149a3-f0cf-4005-9097-a65a602bb1fe?verbose=true&timezoneOffset=-360&subscription-key="+ luisApiKey +"&q="+ userComment +"";
こちらのコードではLUISへURLを飛ばして通信しています
エラー処理&JSON形式で受け取ったデータの欲しいところだけを取得
return robot.http(luisURL).get()(function(err, res, body) { if (err) { return res.send("Encountered an error :( " + err); } body = JSON.parse(body); return msg.reply("" + body['entities'][0]['entity']); });
こちらのコードでは
if (err) { return res.send("Encountered an error :( " + err); }
この部分でエラー処理をしています
さらに
body = JSON.parse(body); return msg.reply("" + body['entities'][0]['entity']);
この部分でLUISからJSON型でデータを受け取り、自分の欲しいデータだけを取得しています
もう少し深堀していきます
https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/983149a3-f0cf-4005-9097-a65a602bb1fe?verbose=true&timezoneOffset=-360&subscription-key=自分が取得したAPI_KEY&q=渡辺さん何しているの?
以上のようなURLをLUIS登録後にすると、以下のようなJSON型のデータが返されます
*自分の設定によってintent名などは変わります
このデータの"entities"の"entity"が欲しい時には
body['entities'][0]['entity']
このように書きます
言われれば簡単なんですが、自分で気づくとなるとなかなか難しいですよね(;^ω^)
以上でプログラムの解説は終わりです
感想
完成してみると簡単だなーっと思いました
ただ思いつくまでが大変でした
これからLUISをせっかく繋げたので他のAPIと組み合わせて使っていこうかなと思っています
エンジニアとは日進月歩の世界です
(*まだ学生です)← 調子に乗るなって感じですが...
今日も読んでくださりありがとうございます
あなたのそばにゆきぽんず