Exemplo n.º 1
0
 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)
Exemplo n.º 2
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)
Exemplo n.º 3
0
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])
Exemplo n.º 4
0
 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())
Exemplo n.º 5
0
    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)
Exemplo n.º 6
0
 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.)
Exemplo n.º 7
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