def reEstimation(xi, data): symbol = "abcdefghijklmnopqrstuvwxyz " emiA = {} emiB = {} trans = {} for c in symbol: if c != " ": emiA[c] = [0.0, 0] emiB[c] = [0.0, 0] else: emiA["space"] = [0.0, 0] emiB["space"] = [0.0, 0] for i in range(0, 2): demo = [0, 0] for j in range(0, 2): nume = [0, 0] t = 0 for c in range(len(data)): nume = a.addProbability(nume, xi[t][i][j]) demo = a.addProbability(demo, xi[t][i][j]) t += 1 trans[i * 10 + j] = nume for j in range(0, 2): trans[i * 10 + j] = a.divideProbability(trans[i * 10 + j], demo) for j in range(0, 2): demo = [0, 0] for s in symbol: nume = [0, 0] for i in range(0, 2): t = 0 for c in range(len(data)): if data[t] == s: nume = a.addProbability(nume, xi[t][i][j]) demo = a.addProbability(demo, xi[t][i][j]) t += 1 if j == 0: if s != " ": emiA[s] = nume else: emiA["space"] = nume else: if s != " ": emiB[s] = nume else: emiB["space"] = nume for s in symbol: if j == 0: if s != " ": emiA[s] = a.divideProbability(emiA[s], demo) else: emiA["space"] = a.divideProbability(emiA["space"], demo) else: if s != " ": emiB[s] = a.divideProbability(emiB[s], demo) else: emiB["space"] = a.divideProbability(emiB["space"], demo) return (emiA, emiB, trans)
def checkHmm(hmm): trans = hmm[2] t = [0.0, 0] t = a.addProbability(t, trans[01]) t = a.addProbability(t, trans[00]) if checkProbability(t)==False: return False t = [0.0, 0] t = a.addProbability(t, trans[01]) t = a.addProbability(t, trans[00]) if checkProbability(t)==False: return False symbol = 'abcdefghijklmnopqrstuvwxyz ' s=[0.0, 0] t=[0.0, 0] for c in symbol: if c ==' ': c='space' s=a.addProbability(s, hmm[0][c]) t=a.addProbability(t, hmm[1][c]) if checkProbability(s)==False or checkProbability(t)==False: return False return True