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の字テーブルの向かいに座った奴といつ喧嘩 が始まってもおかしくない、刺すか刺されるか、そんな雰囲気がいいんじゃねーか。女子供は、牛鮭【ぎゅうしゃ け】定食でも食ってなさいってこった。
[ツッコミを入れる]