MeCabとrubyで遊んだ

mecabのinstall

sudo aptitude install mecab mecab-ipadic mecab-utils libmecab-dev

euc-jp->utf-8

sudo /usr/lib/mecab/mecab-dict-index -d /usr/share/mecab/dic/ipadic -o /var/lib/mecab/dic/ipadic -f euc-jp -t utf-8 -p

mecab-rubyのinstall

mecab -v # mecab of 0.96
wget http://downloads.sourceforge.net/mecab/mecab-ruby-0.96.tar.gz
cd mecab-ruby-0.96/
ruby extconf.rb
make
sudo make install

マルコフ連鎖のコードを書く

#malkov.rb
require 'MeCab'
require 'enumerator'

n = ARGV.first.to_i

#-Owakatiを付けると、parseしたとき分かち書きで表示してくれる
c = MeCab::Tagger.new("-Owakati")

mem = Hash.new{ |h,k| h[k] = []}
a = c.parse($stdin.read).split(" ")
a.each_cons(2){ |k,v| mem[k] << v }

(1..n).inject(a.first) do |select_word, _|
  print select_word
  puts "" if select_word == ""
  vs = mem[select_word]
  vs[rand(vs.length)]
end

使うときは

cat <file> | ruby1.8 malkov.rb 300

みたいな感じで