def _universal_acceptor(symbol_table): fst = pynini.epsilon_machine() fst.set_input_symbols(symbol_table) fst.set_output_symbols(symbol_table) for x, y in symbol_table: if x > 0: fst.add_arc(0, pynini.Arc(x, x, 0, 0)) return fst
# (2) the length of x is n # (3) y belongs to the complement of the language of the FSA # (4) d(x,y) = 1 ; i.e. the string edit distance between x and y is 1. # # # code originally by Jeff Heinz, with modifications import pynini import functools #from prettytable import PrettyTable A = functools.partial(pynini.acceptor, token_type="utf8") T = functools.partial(pynini.transducer, input_token_type="utf8", output_token_type="utf8") e = pynini.epsilon_machine() zero = e - e zero.optimize() ################################ # Defining sigma and sigmastar # ################################ alphabet = "abcd" sigma = zero for x in list(alphabet): sigma = A(x) | sigma sigma.optimize() sigmaStar = (sigma.star).optimize()
# mentioned in Mohri and Sproat appear. import pynini import functools A = functools.partial(pynini.acceptor, token_type="utf8") T = functools.partial(pynini.transducer, input_token_type="utf8", output_token_type="utf8") alphabet = ["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z",">","[<1]","[<2]"] mini = ["a","b","x",">","[<1]","[<2]"] letters = ["a","b","x"] sigma = pynini.epsilon_machine() for x in mini: sigma = A(x)|sigma sigma.optimize() letter = pynini.epsilon_machine() for x in letters: letter = A(x)|letter letter.optimize() S = sigma.star L = letter.star rb = A(">") lb1 = A("[<1]") lb2 = A("[<2]")