Engineerの研鑽

メインはプログラミング系ブログ(本の要約とかもします)

質問はCONTACTやコメントでお願い致します。

【hubot/slack/LUIS】hubotに自然言語処理を組み込んでみた

hubotに自然言語処理を組み込んでみた

 

こんにちは! ゆきぽんずです

 

色々ググってみましたが、hubotにLUISを組み込んでいる記事がなかったので自分で作ったプログラムを載せておきます

 

hubotとLUISを接続

結構簡単にhubotとLUISは接続できました

 

つまずきそうな部分があったので、そこについては解説していきます

 

とりあえず結果をどうぞ

hubotとLUISを接続

 

こんな感じの結果が出力できました

 

そして作成したコードがこちらです

ソースコード

ファイル名 : hubotNaturalLanguageProcessing.js

(function() {
  module.exports = function(robot) {
    return robot.hear(/(.*)/i, function(msg) {
      var luisApiKey, luisURL, userComment;
      userComment = encodeURIComponent(msg.match[1]);
      luisApiKey = process.env.HUBOT_LUIS_API_KEY;
      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 +"";
      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']);
      });
    });
  };

}).call(this);

 

このプログラムは簡単なようで全く簡単に作れませんでした

 

結構深い理解が必要でした

 

ひとつづつ解説していきます

文字列の変換

userComment = encodeURIComponent(msg.match[1]);

 

 このコードでは文字コードをコンピュータが理解できるような文字列に変換しています

 

本来私たちが見ている文字は(”あ”)このような文字ですが、コンピュータが見ている文字というのは(”%5ECN”)このようなものです

 

ですので普通の文字列を入力してもコンピュータが理解をしてくれません

 

そこで上のコードのような変換式が必要となってきます

APIキーの取得

luisApiKey = process.env.HUBOT_LUIS_API_KEY;

 

こちらの扱い方については前の記事で説明しているのでそちらを参考にしてください

 

www.yukiyukiponsu.work

 

またLUISの扱い方については分かりやすい記事があったので、そちらのリンクを貼っておきます

 

ledge.ai

 

URLの取得

 

こちらのコードでは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名などは変わります

 

LUISのJSON型データ

 

このデータの"entities"の"entity"が欲しい時には

 

body['entities'][0]['entity']

 

このように書きます

 

言われれば簡単なんですが、自分で気づくとなるとなかなか難しいですよね(;^ω^)

 

以上でプログラムの解説は終わりです

感想

完成してみると簡単だなーっと思いました

 

ただ思いつくまでが大変でした

 

これからLUISをせっかく繋げたので他のAPIと組み合わせて使っていこうかなと思っています

 

エンジニアとは日進月歩の世界です

(*まだ学生です)← 調子に乗るなって感じですが...

 

今日も読んでくださりありがとうございます

 

あなたのそばにゆきぽんず