예제 #1
0
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)
예제 #2
0
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]
예제 #3
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)
예제 #4
0
 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)))
예제 #5
0
    ]
    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)
예제 #6
0
# -*- 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')   
예제 #7
0
파일: main.py 프로젝트: lupeterm/CYK
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')