def pcfg(): data = [d for d in ecg()] raw = np.array( [ d.values for d in data ] ) sample = np.atleast_3d(raw) g = grammar() for seq in sample : #import pdb; pdb.set_trace() print cyk(seq, g)
def parse(s, grammar): cnf, names, unmarked, invisible, renaming = grammar rnames = dict( (v, k) for k, v in names.items() ) def translate(t, o, stack): dont_mark = False # Invert from grammar rule index to rule number, to determine if the current tree should be skipped. for i, rule in enumerate(cnf): if rule[0] in invisible and i == t[0]: return if rule[0] in unmarked and i == t[0]: dont_mark = True # if type(t) == int: # n = cnf[t] # if len(n) == 2 and type(n[1]) == str: # stack[-1].append( n[1] ) if type(t) == list: #print t[0] in rnames, rnames[t[0]] if t[0] in rnames else "..." if not dont_mark and t[0] in rnames and not rnames[t[0]] in unmarked: stack[-1].append( [ renaming[rnames[t[0]]] ] ) stack.append( stack[-1][-1] ) #if t[0] in invisible: # print "!!!" stack[-1].append( t[1] ) if not dont_mark and t[0] in rnames and not rnames[t[0]] in unmarked: stack.pop() elif len(t) in (2, 3): n = cnf[t[0]] if not dont_mark and n[0] in rnames and not rnames[n[0]] in unmarked: name = rnames[n[0]] if ":" in name: name = name.split(":",1)[1] stack[-1].append( [ renaming[name] ] ) stack.append( stack[-1][-1] ) for i in t[1:]: translate(i, o, stack) if not dont_mark and n[0] in rnames and not rnames[n[0]] in unmarked: stack.pop() for deriv in cyk.cyk(s, cnf, names["main"]): #print deriv o = [] stack = [o] translate( deriv, o, stack ) assert len(o) == 1, "Actual: %r" % o assert stack == [o] yield o[0]
def evaluate(): sentenceFile = open('data/test_sentence') treeFile = open('data/test_trees') correct = 0 incorrect = 0 for cykTree in cyk.cyk(sentenceFile): print cykTree realTree = tree_parser.get_tree(treeFile.readline()) #TODO use traverse here match = True r_traverse = traverse(realTree) for c in traverse(cykTree): r = r_traverse.next() if len(c) != len(r): match = False break if match: correct += 1 print 1 else: incorrect += 1 print 0 print 'correct: ' + str(correct) print 'incorrect: ' + str(incorrect)
def test_with_two_words(self): result = cyk(self.rules, self.reverse_rules, "The flight") self.assertEquals(result, ("(NP (Det The)(N flight))", log(0.3 * 0.4 * 0.4)))
] return G def vis(s1, s2, markovLik1, markovLik2, cyklik1, cyklik2): figsize = (30, 8) fig = plt.figure(figsize=figsize) ax = fig.add_subplot(2, 1, 1) ax.plot(s1, "--o") ax.set_title("Markov = %.4f \n CYK = %.4f" % (markovLik1, cyklik1)) plt.grid() bx = fig.add_subplot(2, 1, 2) bx.plot(s2, "--o") bx.set_title("Markov = %.4f \n CYK = %.4f" % (markovLik2, cyklik2)) plt.grid() plt.show() if __name__ == "__main__": _, s1 = sample() _, s2 = sample2() g = grammar() m = markov() markovLik1, _ = m.decode(s1) markovLik2, _ = m.decode(s2) cyklik1 = cyk(s1, g) cyklik2 = cyk(s2, g) vis(s1, s2, markovLik1, markovLik2, cyklik1, cyklik2) # markovLearning(s1) # markovLearning(s2)
# -*- coding: utf-8 -*- # Use a versão 3 ou superior do python from cyk import regra, cyk gramatica = [] with open ('gramatica.txt', 'r') as reader: for linha in reader: a = linha.split() a.remove('=>') a.remove('|') gramatica.append(a) c = cyk() for i in gramatica: a = i.pop(0) reg = regra(a, i) c.incluir_regra(reg) c.testa_palavra('baaba') c.testa_palavra('baabaa')
import cyk import tabular import cnf import cnf_test import copy def run_pdflatex(file_name='CYK_Tableau.tex', path='.'): return subprocess.call(['pdflatex', file_name], cwd=path) grammar = eingabe.CFG() if input("Do you want to import your Grammar? [y/N] ") in ['Y', 'y']: eingabe.CFG.file_input(grammar) else: eingabe.CFG.new_grammar(grammar) word = eingabe.new_word() saveGrammar = copy.deepcopy(grammar.rules) cnf_test.print_grammar(grammar.rules) grammar.rules = cnf.cnf(grammar) print("cnf done") cnf_test.print_grammar(grammar.rules) table = cyk.cyk(grammar, word) tableau = tabular.to_latex(table, word, grammar.start, grammar.rules, saveGrammar) file = open(file="CYK_Tableau.tex", mode="w") file.write(tableau) file.close() print('\nwritten in CYK_Tableau.tex') run_pdflatex() print('\noutput saved to CYK_Tableau.pdf')