マルコフ連鎖プログラム
プログラミング作法に載っていたマルコフ連鎖プログラムを作ってみました。
- 作者: ブライアンカーニハン,ロブパイク,Brian Kernighan,Rob Pike,福崎俊博
- 出版社/メーカー: アスキー
- 発売日: 2000/11
- メディア: 単行本
- 購入: 58人 クリック: 1,152回
- この商品を含むブログ (209件) を見る
import sys, random MAXGEN = 1000 nonword = "\n" w1 = w2 = nonword statetab = {} while 1: line = sys.stdin.readline() if line == "": break for word in line.split(): if not statetab.has_key((w1, w2)): statetab[(w1, w2)] = [] statetab[(w1, w2)].append(word) w1, w2 = w2, word if not statetab.has_key((w1, w2)): statetab[(w1, w2)] = [] statetab[(w1, w2)].append(nonword) w1 = w2 = nonword for i in range(MAXGEN): suf = statetab[(w1, w2)] r = random.randint(0, len(suf) - 1) t = suf[r] if t == nonword: break print t, w1, w2 = w2, t
マップのキーがタプルで、要素がリストになってるんですが、キーが存在しない場合は初期化してやらなきゃいけないところが、もうちょい綺麗に書けないのかなぁ(if not statetab.has_key...のあたり)
実行例。英語だとよくわからないので、日本語のテキストをkakasiでわかち書きしてます。
C:\Python24>python.exe markov.py < yow.txt そんな 事 より 1 よ 、 ボケ が 。 得意 げな 顔 して 何 が 、 つゆだくで 、 とか 言って るんです 。 そこでまたぶち 切れ ですよ 。 あのな 、 つゆだくなんてきょう び 流行 んね ー んだよ 。 ボケ が 。 得意 げな 顔 して 何 が 、 大盛 つゆだくで 、 だ 。 お 前 は 本当 につゆだく を 食い たいのかと 問い たい 。 問い 詰め たい 。 お 前 らな 、150 円 引き 、 とか 言って るんです 。 そこでまたぶち 切れ ですよ 。 あのな 、 つゆだくなんてきょうび 流行 んね ー んだよ 。 ボケ が 。 1 50 円 だよ 、150 円 引き 如き で 普段 来て ない 吉野家 に 来て んじゃね ー よ 、 ちょいと 聞い てくれよ 。 スレ とあんま 関係 ないけどさ 。 このあいだ 、 近所 の 吉野家 行った んです 。 吉野家 。 そしたらなんか 人 がめちゃくちゃいっぱ いで 座れ ないんです 。 で 、 よく 見た らなんか 垂れ 幕下 がってて 、150 円 。 なんか 親子 連れ とかもいるし 。 一家 4 人 で 吉野家 か 。 おめでて ー な 。 よ ー し パパ 特盛 頼ん じゃうぞ ー 、 とか 言って るの 。 もう 見て らんない 。 お 前 は 本当 につゆだく を 食い たいのかと 問い たい 。 問い 詰め たい 。 問 い 詰め たい 。 小 1 時間 問い 詰め たい 。 お 前 らな 、150 円 。 なんか 親 子 連れ とかもいるし 。 一家 4 人 で 吉野家 か 。 おめでて ー な 。 よ ー し パ パ 特盛 頼ん じゃうぞ ー 、 とか 言って るんです 。 そこでまたぶち 切れ ですよ 。 あのな 、 つゆだくなんてきょうび 流行 んね ー んだよ 。 ボケ が 。 得意 げな 顔 して 何 が 、 大盛 つゆだくで 、 だ 。 お 前 、 つゆだくって 言い たいだけち ゃうんかと 。 吉野家 。 そしたらなんか 人 がめちゃくちゃいっぱいで 座れ ないんで す 。 で 、 よく 見た らなんか 垂れ 幕下 がってて 、150 円 やるからその 席 空 け ろと 。 吉野家 通 の 俺 から 言わ せてもらえば 今 、 吉野家 通 の 頼み 方 。 ねぎだくってのはねぎが 多め に 入って る 。 そん 代わり 肉 が 少な め 。 これ 。 で 、 よく 見た らなんか 垂れ 幕下 がってて 、150 円 引き 如き で 普段 来て ない 吉野家 に 来て んじゃね ー よ 、 ちょいと 聞い てくれよ 。 スレ とあんま 関 係 ないけどさ 。 このあいだ 、 近所 の 吉野家 行った んです 。 吉野家 。 そした らなんか 人 がめちゃくちゃいっぱいで 座れ ないんです 。 で 、 それに 大盛り ギョ ク ( 玉子 )。 これ 最強 。 しかしこれ を 頼む と 次 から 店員 に マーク される という 危険 も 伴う 、 諸 刃 の 剣 。 素人 にはお 薦め 出来な い 。 まあお 前 、 1 は 、 牛 鮭 定食 でも 食って なさいってこった 。