f3.set_final('N3') f3.set_final('P3') for letter in string.letters: f3.add_arc('st', 'L1', (letter), (letter)) for number in xrange(10): f3.add_arc('st', 'N1', (str(number)), (str(number))) f3.add_arc('L1', 'N1', (str(number)), (str(number))) f3.add_arc('N1', 'N2', (str(number)), (str(number))) f3.add_arc('N2', 'N3', (str(number)), (str(number))) f3.add_arc('L1', 'P1', (), ('0')) f3.add_arc('N1', 'P2', (), ('0')) f3.add_arc('N2', 'P3', (), ('0')) f3.add_arc('P1', 'P2', (), ('0')) f3.add_arc('P2', 'P3', (), ('0')) return f3 # The above code adds zeroes but doesn't have any padding logic. Add some! if __name__ == '__main__': user_input = raw_input().strip() f1 = letters_to_numbers() f2 = truncate_to_three_digits() f3 = add_zero_padding() if user_input: print("%s -> %s" % (user_input, composechars(tuple(user_input), f1, f2, f3)))
f3 = FST('soundex-padzero') states = ['1', '2', '3', '4'] for state in states: f3.add_state(state) f3.initial_state = '1' f3.set_final('4') for letter in string.letters: f3.add_arc('1', '1', letter, letter) for number in range(1, 10): f3.add_arc('1', '2', str(number), str(number)) f3.add_arc('2', '3', str(number), str(number)) f3.add_arc('3', '4', str(number), str(number)) f3.add_arc('2', '4', (), '00') f3.add_arc('3', '4', (), '0') return f3 if __name__ == '__main__': user_input = raw_input().strip() f1 = letters_to_numbers() f2 = truncate_to_three_digits() f3 = add_zero_padding() if user_input: print("%s -> %s" % (user_input, composechars(tuple(user_input), f1, f2, f3)))
f3.add_arc('p2', 'p3', (str(number)), (str(number))) f3.add_arc('p3', 'end', (str(number)), (str(number))) return f3 if __name__ == '__main__': #print "Enter a Name" user_input = raw_input().strip() f1 = letters_to_numbers() f2 = truncate_to_three_digits() f3 = add_zero_padding() if user_input: print("%s -> %s" % (user_input, composechars(tuple(user_input), f1, f2, f3))) print "------------ Tracing --------------------" print "---------STEP 1-------------" print trace(f1, user_input) step1 = composechars(tuple(user_input), f1) print step1 print "----------STEP 2------------" print trace(f2, step1) step2 = composechars(tuple(step1), f2) print step2 print "----------STEP 3------------" print trace(f3, step2) step3 = composechars(tuple(step2), f3)
# letter that it consumed. for letter in string.ascii_lowercase: if letter in vowels: _ = f.add_arc('1', '1', (letter), ()) else: _ = f.add_arc('1', '1', (letter), (letter)) # Evaluate it on some example words print ''.join(f.transduce(['v', 'o', 'w', 'e', 'l'])) print ''.join(f.transduce('e x c e p t i o n'.split())) print ''.join(f.transduce('c o n s o n a n t'.split())) print f.transduce(['a','w']) from fsmutils import composechars S = "vowels" output = composechars(S, f, f, f) print output from fsmutils import trace trace(f, S) # Add the rest of the arcs f1 = fst.FST('new') # All we need is a single state ... f1.add_state('start') f1.add_state('next') # and this same state is the initial and the nal state f1.initial_state = 'start' f1.set_final('next')
#f3.add_arc('4', '4', (str(number)), ('')) #f3.add_arc('1', '2_N', (), ('0')) #f3.add_arc('2_L', '3', (), ('0')) # f3.add_arc('2_N', '3', (), ('0')) # f3.add_arc('3', '4', (), ('0')) return f3 # The above code adds zeroes but doesn't have any padding logic. Add some! f1 = letters_to_numbers() f2 = truncate_to_three_digits() f3 = add_zero_padding() # s = ['j', 'u', 'e', 'r', 't', 'y', 'b'] # p = ['j', 'u', 'r', 'a', 'f', 's', 'k', 'y'] # trace(f1, p) # print(composechars(p, f1)) # k = 'peterson' # print "".join(f1.transduce(x for x in k)) # trace(f1, (x for x in k)) k = 'peterson' print(composechars(tuple(x for x in k), f1, f2, f3)) # print "".join(f2.transduce(x for x in 'j')) # trace(f2,(x for x in '1')) # q = 'j' # print "".join(f3.transduce(x for x in q)) # trace(f3, (x for x in q))
f3.initial_state = '1' # The soundex string will either need no padding in which case its final # state is 1, or it will need 1 to 3 zeros and have final state 2 f3.set_final('1') f3.set_final('2') f3.add_arc('1', '2', (), ('000')) f3.add_arc('1a', '2', (), ('00')) f3.add_arc('1b', '2', (), ('0')) for letter in string.letters: f3.add_arc('1', '1', (letter), (letter)) for number in xrange(10): f3.add_arc('1', '1a', (str(number)), (str(number))) for number in xrange(10): f3.add_arc('1a', '1b', (str(number)), (str(number))) for number in xrange(10): f3.add_arc('1b', '2', (str(number)), (str(number))) return f3 if __name__ == '__main__': user_input = raw_input().strip() f1 = letters_to_numbers() f2 = truncate_to_three_digits() f3 = add_zero_padding() if user_input: print("%s -> %s" % (user_input, composechars(tuple(user_input), f1, f2, f3)))