MeCabとPythonでマルコフ連鎖を書いてみる(改)
Python界でも自分で書いたプログラムを晒すとえらい人が添削してくれます、という仕組みはまだないですが、ちょうど時を同じくしてマルコフ連鎖のプログラムを書いている人がいました。
なるほど、マルコフ辞書のキーはタプルにしたほうがスッキリしますね。こういうサンプルソースを公開してくれる人がいると勉強になるなぁ。ありがとうございます。> pyletさん
というわけで、 こないだのプログラム に手を入れてみました。だいぶスッキリしたみたい。これなら、連鎖数3にも5秒でできるよ。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import MeCab
def wakati(text):
t = MeCab.Tagger("-Owakati")
m = t.parse(text)
result = m.rstrip(" \n").split(" ")
return result
if __name__ == "__main__":
filename = "test.txt"
src = open(filename, "r").read()
wordlist = wakati(src)
# Create table of Markov Chain
markov = {}
w1 = ""
w2 = ""
for word in wordlist:
if w1 and w2:
if (w1, w2) not in markov:
markov[(w1, w2)] = []
markov[(w1, w2)].append(word)
w1, w2 = w2, word
# Generate Sentence
count = 0
sentence = ""
w1, w2 = random.choice(markov.keys())
while count < len(wordlist):
tmp = random.choice(markov[(w1, w2)])
sentence += tmp
w1, w2 = w2, tmp
count += 1
print sentence
『プログラムは、人々がそれを読むために書かれるべきである。
たまたま、それが計算機で実行されるにすぎない。』 - Gerald Sussman










