Hubotでkuromoji.jsによる形態素解析を試す
Hubotでkuromoji.jsを使って形態素解析を行う方法を調べてみました。形態素解析のライブラリは node-mecab-async も有名ですが、Mecabのバイナリを用意する必要があります。kuromoji.jsはPure JavaScriptの実装なので、Herokuに簡単にデプロイできます。
yo hubot
YeomanでHubotのテンプレートを生成します。
npm install -g yo generator-hubot mkdir -p hubot-learn cd hubot-learn yo hubot
kuromoji.jsを依存関係に追加します。
npm install --save kuromoji
これから scripts/main.coffee
にコードを書いていきます。
形態素解析器を使う
kuromoji.jsを初期化します。kuromoji.builder()
に辞書のパスを渡して build()
を実行すると、コールバックで解析器のインスタンスが返されます。
kuromoji = require 'kuromoji' class Tokenizer constructor: -> kuromoji .builder(dicPath: 'node_modules/kuromoji/dist/dict/') .build (err, tokenizer) => @_tokenizer = tokenizer tokenize: (text, cb) -> if @_tokenizer then cb @_tokenizer.tokenize text tokenizer = new Tokenizer()
何か聞こえたら適当な単語をピックアップして返すようにしてみましょう。解析器に文字列を渡すとトークンの配列が返されます。ここで品詞を判定すれば名詞のみ抜き出すといったことも可能です。
module.exports = (robot) -> robot.hear /(.+)/, (msg) -> tokenizer.tokenize msg.message.text, (tokens) -> filtered = tokens.filter (token) -> token.pos == '名詞' words = filtered.map (token) -> token.surface_form msg.send msg.random words
Herokuにデプロイする
ここではHerokuにデプロイします。Slackと連携する場合は、Slackの設定画面でトークンを取得します。
heroku create --stack cedar heroku ps:scale web=1 heroku addons:add rediscloud heroku config:add HUBOT_SLACK_TOKEN= #Slack連携の場合 heroku config:add HUBOT_HEROKU_KEEPALIVE_URL=http://your-app.herokuapp.com git push heroku master
SlackでHubotに話しかけてみましょう。まずはDirect Messageで話しかけてみるとよいでしょう。
うまく動かない場合はログを確認します。
heroku logs