Rubyでマルコフ連鎖botを作る話[2/3:納豆編]
前回のラブライブ!
MeCabを使ってみる
早速MeCabを使ってみます。
MeCabで形態素解析を行うにはmecab
コマンドを実行し、好きな文章を入力します。
実行例:
mecab ぼくはすみくんだよ〜 ぼく 名詞,代名詞,一般,*,*,*,ぼく,ボク,ボク はすみ 名詞,固有名詞,人名,一般,*,*,はすみ,ハスミ,ハスミ くん 名詞,接尾,人名,*,*,*,くん,クン,クン だ 助動詞,*,*,*,特殊・ダ,基本形,だ,ダ,ダ よ 助詞,終助詞,*,*,*,*,よ,ヨ,ヨ 〜 記号,一般,*,*,*,*,〜,〜,〜 EOS ぷよよよよんよをしている ぷよよよよんよ 名詞,一般,*,*,*,*,ぷよよよよんよ,プヨヨヨヨンヨ,プヨヨヨヨンヨ を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シ て 助詞,接続助詞,*,*,*,*,て,テ,テ いる 動詞,非自立,*,*,一段,基本形,いる,イル,イル EOS
ちゃんとユーザー辞書も認識してくれていることがわかります。やったー
RubyでMeCabを使う
RubyでMeCabを使うには
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さえ取得できればオッケーなので深くは掘り下げませんでした。
ということで、次のエントリでマルコフ連鎖をやっていきます。