ブラウザでマルコフ連鎖を用いた文章を要約できる要約器を作った
作ったもの
ブラウザでマルコフ連鎖(Website)
hubotでマルコフ連鎖(Twitter)
hubotはこんな感じのことを10分毎にツイートしている。

使用したもの
今回、要約器や要約スクリプトを作成するにあたって、markov-chain-kuromojiを作成した。
kuromoji.jsは、mecabと違ってJavaScriptのみで記述されているので、hubotへの組み込みが容易。
ソースコード
hubotのスクリプトは次の通り
cronJob = require('cron').CronJob
MarkovChain = require('markov-chain-kuromoji')
Twit = require 'twit'
client = new Twit({
consumer_key: process.env.HUBOT_TWITTER_KEY
consumer_secret: process.env.HUBOT_TWITTER_SECRET
access_token: process.env.HUBOT_TWITTER_TOKEN
access_token_secret: process.env.HUBOT_TWITTER_TOKEN_SECRET
})
module.exports = (robot) ->
cronjob = new cronJob(
cronTime: "00 00,10,20,30,40,50 * * * *"
start: true
timeZone: "Asia/Tokyo"
onTick: ->
client.get 'statuses/home_timeline', {count: 200}, (err, tweets, response) =>
if !err
input = null
for i in tweets
input += "#{i.text}。"
input = input.replace /。。/g, '。'
input = input.replace /(https?:\/\/[\x21-\x7e]+)/g, ''
input = input.replace /(@[\x21-\x7e]+)/g, ''
input = input.replace /\s*/g, ''
markov = new MarkovChain(input)
markov.start(1, (output) =>
robot.send {room:'Twitter'}, "#{output}"
)
else
console.log err
)
hubotの作成手順はこちら
- node-cron : 10分ごとにツイートし、同時にホームライムラインのツイートの取得。15分に15回程度だったと思うが、TwitterAPIの制限[rate limit exceeded]に引っかかるかもしれないので適度に取得回数を調節する。
- twit : ホームタイムラインのツイートを最大200件取得できる。
あとは適当に要らない記号等を正規表現で取り除いて、マルコフ連鎖モジュールで要約している。
タイムラインから取得したツイートやマルコフ連鎖モジュール内の要約用の辞書をデータベースに保存すれば、もっといろいろな文章ができそう。