形態素解析&マルコフ連鎖を使って文章をつぶやくTwitter botを作った

Rubytwitter botを作った。構想から完成まで約3ヶ月 何だかんだでものすごく時間がかかってしまった。。。

github.com

どうせなら使ったことのない言語で作りたかったので、Rubyに挑戦してみることに。
gitもまともに使ったことがなかったので、bitbucketでソースコードの管理をしながら作った。
完成するまでの流れを残しておく。

Rubytwitter botを作る方法を調べる

とにかくググる

どうせだったらHeroku使いたい(少しだけ使ったことあるから)

Herokuを使う方法を調べる

とにかくググる

調べていく中で、形態素解析マルコフ連鎖 という言葉を知る。
定期的につぶやくなら、決まった言葉をランダムにつぶやくだけじゃ面白くないので形態素解析マルコフ連鎖を使ってみることに!

形態素解析マルコフ連鎖について調べる

ググる

Mecabを入れてみる

を参考にしてrubyからMecabを使ってみる

require 'natto'

nm = Natto::MeCab.new

nm.parse('今日も100%スマイルサーブ。テニスの王女様。鈴木裕乃です。') do |n|
    puts "#{n.surface}\t#{n.feature}"
end
今日   名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
も 助詞,係助詞,*,*,*,*,も,モ,モ
100 名詞,数,*,*,*,*,*
%   名詞,サ変接続,*,*,*,*,*
スマイル    名詞,一般,*,*,*,*,スマイル,スマイル,スマイル
サーブ   名詞,サ変接続,*,*,*,*,サーブ,サーブ,サーブ
。 記号,句点,*,*,*,*,。,。,。
テニス   名詞,一般,*,*,*,*,テニス,テニス,テニス
の 助詞,連体化,*,*,*,*,の,ノ,ノ
王女  名詞,一般,*,*,*,*,王女,オウジョ,オージョ
様 名詞,接尾,人名,*,*,*,様,サマ,サマ
。 記号,句点,*,*,*,*,。,。,。
鈴木  名詞,固有名詞,人名,姓,*,*,鈴木,スズキ,スズキ
裕乃  名詞,固有名詞,人名,名,*,*,ひろの,ヒロノ,ヒロノ
です  助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。 記号,句点,*,*,*,*,。,。,。
    BOS/EOS,*,*,*,*,*,*,*,*

できた!
(鈴木/裕乃にするためにMecab辞書に名前追加してます)

色々調べてなんとなくわかったので、実装の方針が固まる

実装方針決定

  • エビ中さん大好きなのでエビ中さん関連で
  • フォロワーさんのツイート+歌詞の一部を合わせたリストを形態素解析
  • 解析したものをマルコフ連鎖を使って文章組み立て
  • つぶやく&リプライの作成
  • 生徒の名前が含まれていたら、該当生徒がよく使う顔文字(アメブロより拝借)をランダムで付与

と、方針が決まったので実際にコーディング

問題発生and回避

  • Mecabでやろうとしたけど、herokuには入れられない!!
  • okura使う???試してみたけどwakati書きに時間がかかりすぎぃい(やり方が悪い?)
  • 形態素解析は YahooのAPIを使うことに
  • API制限があるが、24時間で50000回制限&1リクエストで100kbだったから大丈夫
  • 1時間に1回ツイートを取得→形態素解析して辞書を作り直す
  • 取得するツイート数は最大600にすれば制限に引っかからない

実装の参考に(ほぼ丸写しに)させて頂いたコードなど

Twitter Streaming APIRubyのクラス分け

形態素解析マルコフ連鎖

Heroku関連

  • branchをHerokuにpushしたい
    • https://devcenter.heroku.com/articles/git

      Branches pushed to Heroku other than master will be ignored by this command. If you’re working out of another branch locally, you can either merge to master before pushing, or specify that you want to push your local branch to a remote master. To push a branch other than master, use this syntax:
      $ git push heroku yourbranch:master

  • ローカルでの動作確認/foreman/.env
    • https://devcenter.heroku.com/articles/procfile

      Config vars saved in the .env file of a project directory will be added to the environment when run by Foreman. For example we can set the RACK_ENV to development in your environment.
      echo "RACK_ENV=development" >>.env

いろいろあったが何とか完成!他のエビ中関連botさんと会話しつつ、全く役に立たないbotは元気に稼働しています。内容は意味不明・・・

キングオブ学芸会bot (@kogakugeeeekai) | Twitter

これお気に入り

参考にさせていただた皆様に感謝!