Theories of Pleiades

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

Rubyでマルコフ連鎖botを作る話[2/3:納豆編]

前回のラブライブ!

mwc922-hsm.hatenablog.com

  1. しゅまいになりたい
  2. MeCabをインストールした
  3. MeCabの辞書をパワーアップした


MeCabを使ってみる

早速MeCabを使ってみます。

MeCab形態素解析を行うにはmecabコマンドを実行し、好きな文章を入力します。
実行例:

mecab
ぼくはすみくんだよ〜
ぼく    名詞,代名詞,一般,*,*,*,ぼく,ボク,ボク
はすみ  名詞,固有名詞,人名,一般,*,*,はすみ,ハスミ,ハスミ
くん    名詞,接尾,人名,*,*,*,くん,クン,クン
だ      助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
よ      助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
〜      記号,一般,*,*,*,*,〜,〜,〜
EOS
ぷよよよよんよをしている
ぷよよよよんよ  名詞,一般,*,*,*,*,ぷよよよよんよ,プヨヨヨヨンヨ,プヨヨヨヨンヨ
を      助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
し      動詞,自立,*,*,サ変・スル,連用形,する,シ,シ
て      助詞,接続助詞,*,*,*,*,て,テ,テ
いる    動詞,非自立,*,*,一段,基本形,いる,イル,イル
EOS

ちゃんとユーザー辞書も認識してくれていることがわかります。やったー


RubyMeCabを使う

RubyMeCabを使うには
1. 公式に配布されているRubyバインディングを使う 2. gem 'natto'を利用する

の2つの方法があります。今回はnattoを利用することにします。

gemはGemfileに書いてbundle installしてもいいですし、直接gem install nattoしてもいいと思います。

以下はRubyからMeCabを利用するサンプルスクリプトです。

require 'natto'

text = "ぼくはすみくんだよ〜"

nm = Natto::MeCab.new

nm.parse(text) do |n|
  puts "#{n.surface}\t#{n.feature}"
end
ruby natto.rb
ぼく    名詞,代名詞,一般,*,*,*,ぼく,ボク,ボク
はすみ  名詞,固有名詞,人名,一般,*,*,はすみ,ハスミ,ハスミ
くん    名詞,接尾,人名,*,*,*,くん,クン,クン
だ      助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ
よ      助詞,終助詞,*,*,*,*,よ,ヨ,ヨ
〜      記号,一般,*,*,*,*,〜,〜,〜
        BOS/EOS,*,*,*,*,*,*,*,*


Natto::MeCabクラスのメソッドparseに形態素解析したい文字列を渡しています。
その返り値をnとして受け取り、surfaceが単語、featureがその詳細…という感じになっている。

nattoについてはもっとできることあるっぽいですがマルコフ連鎖をするにはsurfaceさえ取得できればオッケーなので深くは掘り下げませんでした。



ということで、次のエントリでマルコフ連鎖をやっていきます。

mwc922-hsm.hatenablog.com