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)
Ejemplo n.º 2
0
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