テーブルを逆向きにしてみた
{"単語":["次の単語A","次の単語A","次の単語B"]}から、{次の単語A,["単語","単語"]}を作るスクリプト。
前の単語の出現率を求めてる時点でマルコフモデルって言葉と矛盾してる気がするが、その辺は気にしないで置く。
いったん数値化(P(A2|A1),A1の単語が出たときにA2の単語が出る確率)して、ベイズの法則使ってP(A1|A2)求めたほうが早いかと思ったけど、結局P(A1)求めるのにいろいろ計算しないといけないのでこっちのほうが直感的で楽かも。
#!/usr/bin/python # -*- coding: sjis -*- #逆マルコフテーブル作成 def readMarkovTable(): import json file = open("markovtable",'r') mt = json.read(file.read()) file.close() return mt def writeMarkovTable(mt): import json file = open("invert_markovtable",'w') file.write(json.write(mt)) file.close() if __name__ == "__main__": mt = readMarkovTable() imt = {} for mt_a in mt: for mt_a2 in mt[mt_a]: if imt.has_key(mt_a2): lst = imt[mt_a2] else: lst = [] lst.append(mt_a) imt[mt_a2] = lst writeMarkovTable(imt)