Theories of Pleiades

技術の話とかイベントに行った話とか思ったこととか

Rubyでマルコフ連鎖botを作る話[1/3:導入編]

しゅまいの自分バージョンがつくりたい

twitter.com


環境

OS: Arch Linux
言語: Ruby 2.5.1
使ったもの: めかぶ、納豆、Twitter、オレンジジュース(作業のお供として)


方針としては、
1. MeCabとnattoで形態素解析
2. マルコフ連鎖でゴリゴリ
3. TwitterAPIをッターン


RubyMeCabを使う

マルコフ連鎖で文章を生成するには、元となる文章を単語ごとに分割したデータが必要です。

今日の天気は晴れです

 ↓

今日 の 天気 は 晴れ です

といった具合に分割していきます。形態素解析エンジンのMeCabを使います。


MeCabインストール

エンジン本体がGitHubに公開されているので、それをcloneして使います。

github.com

中身はこんな感じ

tree -d -L 1
.
├── doxygen
├── mecab
├── mecab-ipadic
└── mecab-jumandic

MeCab本体をインストールします。ここで、解析結果をutf-8で得られるように./congifureにオプションをつけるのを忘れないようにする。

# mecab/mecab
./configure --with-charset=utf8
make install


MeCab辞書インストール

MeCab形態素解析をするには辞書をインストールしなければなりません。


  • MeCab標準のIPA辞書をutf-8でインストール
  • 追加データmecab-ipadic-neologdをインストール
  • よく使う非言語的単語をユーザー定義辞書に追加


まず、cloneしたリポジトリに同梱されていたmecab-ipadicをインストールします。
やることはmecab本体と同じです。

# mecab/mecab-ipadic
./configure --with-charset=utf8 #ここ大事
make install


次に、新語やネット用語、人名などの検出を強化するためmecab-ipadic-neologdをインストールします。

github.com

詳細な手順は上記リンクを見てもらえば書いてあるので割愛します。


最後に、よく使う単語の中でも一般的でない単語をユーザー定義に追加します。
例として、「はすみ」、「ぷよよん(プロコンの意)」、「ぷよよよよんよ(プログラミングの意)」などを追加していきます。

ユーザー辞書へ追加する単語はcsvファイルに記述します。 以下が今回ぼくが追加した単語ファイルです。

はすみ,,,1,名詞,固有名詞,人名,一般,*,*,はすみ,ハスミ,ハスミ
にゃーん,,,1,感動詞,*,*,*,*,*,にゃーん,ニャーン,ニャーン
にゃん,,,1,感動詞,*,*,*,*,*,にゃん,ニャン,ニャン
ぷよよよよんよ,,,1,名詞,一般,*,*,*,*,ぷよよよよんよ,プヨヨヨヨンヨ,プヨヨヨヨンヨ
ぷよよん,,,1,名詞,一般,*,*,*,*,ぷよよん,プヨヨン,プヨヨン


はじめと後ろから3番目に追加する単語、後ろ2つはその読みをカタカナで入力します。 2,3番目はMeCab側でIDが追加されるので空にしておきます。

4番目に単語検出の優先度を入力します。
自動的に優先度をつけてくれる機能もあるらしいですが、めんどくさかったので全て1にしておきました。数が大きくなるほど優先度が下がります。


その後には品詞の分類をIPA品詞体型というものに則って入力していきます。
ここが間違っていると辞書に追加するコマンドを叩いたときにエラーを吐かれてしまうので気をつけましょう。

IPA品詞体型については下のリンクを参考にさせていただきました。

miner.hatenablog.com


作った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

セミコロンを消します(コメントアウトを外す)。


以上で自分のツイートを形態素解析する準備が整いました。
次は、実際にMeCabを使って形態素解析をしていきます。

mwc922-hsm.hatenablog.com