def testNegativeAssertions(self): with self.assertRaises(BitWeightRangeError): unused_v = BitWeight(-.5) with self.assertRaises(BitWeightRangeError): unused_v = BitWeight(-1, 2) with self.assertRaises(BitWeightRangeError): unused_v = BitWeight(1, -2) with self.assertRaises(BitWeightRangeError): unused_v = BitWeight(1, 0)
def setUp(self): self.tiny = BitWeight(1, 1e6) self.half = BitWeight(.5) self.quarter = BitWeight(.25) self.eighth = BitWeight(.125) self.century = BitWeight(100) self.millenium = BitWeight(1000)
class TestBitWeight(unittest.TestCase): def setUp(self): self.tiny = BitWeight(1, 1e6) self.half = BitWeight(.5) self.quarter = BitWeight(.25) self.eighth = BitWeight(.125) self.century = BitWeight(100) self.millenium = BitWeight(1000) def testNegativeAssertions(self): with self.assertRaises(BitWeightRangeError): unused_v = BitWeight(-.5) with self.assertRaises(BitWeightRangeError): unused_v = BitWeight(-1, 2) with self.assertRaises(BitWeightRangeError): unused_v = BitWeight(1, -2) with self.assertRaises(BitWeightRangeError): unused_v = BitWeight(1, 0) def testAddition(self): three_quarters = .75 self.assertEqual((self.half + self.quarter).real(), .75) self.assertEqual((self.quarter + self.half).real(), .75) # test the code path for equal values self.assertEqual((self.quarter + self.quarter).real(), 0.5) def testMultiplication(self): one_quarter = .125 self.assertEqual((self.half * self.quarter).real(), .125) self.assertEqual((self.quarter * self.half).real(), .125) def testDivision(self): self.assertEqual((self.half / self.quarter).real(), 2.) self.assertEqual((self.quarter / self.half).real(), .5) def testEquality(self): my_half = BitWeight(1, 2) self.assertEqual(self.half, my_half) self.assertEqual(self.half.real(), my_half.real()) my_quarter = BitWeight(1, 4) self.assertEqual(self.quarter, my_quarter) self.assertEqual(self.quarter.real(), my_quarter.real()) def testComparison(self): bws = [self.quarter, self.half, self.eighth] bws.sort() self.assertEqual([bw.real() for bw in bws], [.125, .25, .5])
def testEquality(self): my_half = BitWeight(1, 2) self.assertEqual(self.half, my_half) self.assertEqual(self.half.real(), my_half.real()) my_quarter = BitWeight(1, 4) self.assertEqual(self.quarter, my_quarter) self.assertEqual(self.quarter.real(), my_quarter.real())
def set_viterbi(self): VB = defaultdict(BitWeight) TO = defaultdict(BitWeight) NN = defaultdict(BitWeight) PPSS = defaultdict(BitWeight) VB = { "name": "VB", "start": BitWeight(.019), "VB": BitWeight(.0038), "TO": BitWeight(.83), "NN": BitWeight(.0040), "PPSS": BitWeight(.23) } TO = { "name": "TO", "start": BitWeight(0.0043), "VB": BitWeight(0.035), "TO": BitWeight(0.), "NN": BitWeight(0.016), "PPSS": BitWeight(0.00079) } NN = { "name": "NN", "start": BitWeight(0.041), "VB": BitWeight(0.047), "TO": BitWeight(0.00047), "NN": BitWeight(0.087), "PPSS": BitWeight(0.0012) } PPSS = { "name": "PPSS", "start": BitWeight(0.067), "VB": BitWeight(0.007), "TO": BitWeight(0.), "NN": BitWeight(0.0045), "PPSS": BitWeight(0.00014) } transitions = [VB, TO, NN, PPSS] I = defaultdict(BitWeight) want = defaultdict(BitWeight) to = defaultdict(BitWeight) race = defaultdict(BitWeight) I = { "name": "I", "VB": BitWeight(0.), "TO": BitWeight(0.), "NN": BitWeight(0.), "PPSS": BitWeight(.37) } want = { "name": "want", "VB": BitWeight(0.0093), "TO": BitWeight(0.), "NN": BitWeight(0.000054), "PPSS": BitWeight(0.) } to = { "name": "to", "VB": BitWeight(0.), "TO": BitWeight(0.99), "NN": BitWeight(0.), "PPSS": BitWeight(0.) } race = { "name": "race", "VB": BitWeight(0.00012), "TO": BitWeight(0.), "NN": BitWeight(0.00057), "PPSS": BitWeight(0.) } emissions = [I, want, to, race] for s in transitions: if s["name"] == self.cur_state: tprob = s[self.pointer.cur_state] break for e in emissions: if e["name"] == self.cur_obs: eprob = e[self.cur_state] break self.viterbi = (eprob * tprob)
def __init__(self, cur_state, cur_obs, cur_time, pointer): self.cur_state = cur_state self.cur_obs = cur_obs self.cur_time = cur_time self.pointer = pointer self.viterbi = BitWeight(0.)
states = ['VB', 'TO', 'NN', 'PPSS'] cur_time = 0 initial = LatticeNode('start', "#", cur_time, None) lattice = list() previous = initial best = initial for s in states: n = LatticeNode(s, obs[cur_time], cur_time, previous) lattice.append(n) n.set_viterbi() if best.viterbi < n.viterbi: best = n previous = best cur_time += 1 while cur_time < len(obs): best.viterbi = BitWeight(0.) for s in states: n = LatticeNode(s, obs[cur_time], cur_time, previous) lattice.append(n) n.set_viterbi() if best.viterbi < n.viterbi: best = n previous = best cur_time += 1 p = lattice[-1] tagseq = list() while p.cur_state != "start": tagseq.append(p.pointer) p = p.pointer