Rubyでマルコフ連鎖botを作る話[1/3:導入編]
しゅまいの自分バージョンがつくりたい
環境
OS: Arch Linux
言語: Ruby 2.5.1
使ったもの: めかぶ、納豆、Twitter、オレンジジュース(作業のお供として)
方針としては、
1. MeCabとnattoで形態素解析
2. マルコフ連鎖でゴリゴリ
3. TwitterAPIをッターン
RubyでMeCabを使う
マルコフ連鎖で文章を生成するには、元となる文章を単語ごとに分割したデータが必要です。
今日の天気は晴れです
↓
今日 の 天気 は 晴れ です
といった具合に分割していきます。形態素解析エンジンのMeCabを使います。
MeCabインストール
エンジン本体がGitHubに公開されているので、それをcloneして使います。
中身はこんな感じ
tree -d -L 1 . ├── doxygen ├── mecab ├── mecab-ipadic └── mecab-jumandic
MeCab本体をインストールします。ここで、解析結果をutf-8で得られるように./congifure
にオプションをつけるのを忘れないようにする。
# mecab/mecab ./configure --with-charset=utf8 make install
MeCab辞書インストール
MeCabで形態素解析をするには辞書をインストールしなければなりません。
まず、cloneしたリポジトリに同梱されていたmecab-ipadicをインストールします。
やることはmecab本体と同じです。
# mecab/mecab-ipadic ./configure --with-charset=utf8 #ここ大事 make install
次に、新語やネット用語、人名などの検出を強化するためmecab-ipadic-neologdをインストールします。
詳細な手順は上記リンクを見てもらえば書いてあるので割愛します。
最後に、よく使う単語の中でも一般的でない単語をユーザー定義に追加します。
例として、「はすみ」、「ぷよよん(プロコンの意)」、「ぷよよよよんよ(プログラミングの意)」などを追加していきます。
ユーザー辞書へ追加する単語はcsvファイルに記述します。 以下が今回ぼくが追加した単語ファイルです。
はすみ,,,1,名詞,固有名詞,人名,一般,*,*,はすみ,ハスミ,ハスミ にゃーん,,,1,感動詞,*,*,*,*,*,にゃーん,ニャーン,ニャーン にゃん,,,1,感動詞,*,*,*,*,*,にゃん,ニャン,ニャン ぷよよよよんよ,,,1,名詞,一般,*,*,*,*,ぷよよよよんよ,プヨヨヨヨンヨ,プヨヨヨヨンヨ ぷよよん,,,1,名詞,一般,*,*,*,*,ぷよよん,プヨヨン,プヨヨン
はじめと後ろから3番目に追加する単語、後ろ2つはその読みをカタカナで入力します。 2,3番目はMeCab側でIDが追加されるので空にしておきます。
4番目に単語検出の優先度を入力します。
自動的に優先度をつけてくれる機能もあるらしいですが、めんどくさかったので全て1にしておきました。数が大きくなるほど優先度が下がります。
その後には品詞の分類をIPA品詞体型というものに則って入力していきます。
ここが間違っていると辞書に追加するコマンドを叩いたときにエラーを吐かれてしまうので気をつけましょう。
IPA品詞体型については下のリンクを参考にさせていただきました。
作ったcsvファイルの中身を辞書に登録していきます。
作成したユーザー辞書は/usr/local/lib/mecab/dic/userdic
の中にuser.dicという名前で保存することとします。
mkdir /usr/local/lib/mecab/dic/userdic /usr/local/libexec/mecab/mecab-dict-index \ -d /usr/local/lib/mecab/dic/ipadic \ # システム辞書ディレクトリのパス -u /usr/local/lib/mecab/dic/userdic/user.dic \ # 保存先ファイルのパス -f utf-8 \ # csvファイルの文字コード -t utf-8 \ # 辞書の文字コード user.csv # 作成しておいたcsvファイル
作成したユーザー辞書を使うようMeCabに設定を書き込みます。 /usr/local/etc/mecabrcの中にある
; userdic = /usr/local/lib/mecab/dic/userdic/user.dic