2012-05-18 :-(
_ [ruby][マルコフ連鎖]マルコフ連鎖プログラム - pyletの日記
元ネタが python で書かれているので ruby に写経( 原典の「プログラミング作法」では C だった気がする )。
環境
- Microsft Windows 7 Professional
- cygwin
- ruby 1.8.7
- MeCab: Yet Another Part-of-Speech and Morphological Analyzer
- 吉野家コピペとは - はてなキーワード
写経
#!/usr/bin/ruby
# -*- encoding: utf-8 -*-
#
# マルコフ連鎖プログラム - pyletの日記 http://d.hatena.ne.jp/pylet/20060501/markov
#
require 'pp'
MAXGEN = 1000
nonword = "\n"
w1 = w2 = nonword
statetab ||= {}
STDIN.each { |line|
for word in line.split() do
statetab[ [w1, w2] ] ||= []
statetab[ [w1, w2] ] << word
w1, w2 = w2, word
end
}
statetab[ [w1, w2] ] ||= []
statetab[ [w1, w2] ] << nonword
w1 = w2 = nonword
0.step(MAXGEN) {|i|
suf = statetab[ [w1, w2] ]
t = suf[rand(suf.length)]
if t == nonword
break
end
print t
w1, w2 = w2, t
}
puts ""
mecab で分かち書きしておく。
% mecab -O wakati yo.txt > yoyo.txt
実行
% ./markov0.rb < yoyo.txt
昨日、近所の吉野家行ったんです。もうね、アホかと。馬鹿かと問いたい。問い詰めたい。お前、つゆだくで、よ く見たらなんか垂れ幕下がってて、150円やるからその席空けろと。お前らな、150円やるからその席空けろ と。吉野家ってのはな、もっと殺伐としてるべきなんだよ。Uの字テーブルの向かいに座った奴といつ喧嘩が始ま ってもおかしくない、刺すか刺されるか、そんな雰囲気がいいんじゃねーか。おめでてーな。よーしパパ特盛頼ん じゃうぞー、とか書いてあるんです。そこでまたぶち切れですよ。Uの字テーブルの向かいに座った奴といつ喧嘩 が始まってもおかしくない、刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、牛鮭【ぎゅうしゃ け】定食でも食ってなさいってこった。
[ツッコミを入れる]



