Ejemplo n.º 1
0
    def __init__(self, s):
        """
        Takes a sentence and learns a canonical derivation according to the simple grammar defined below.
        """

        derivs_cur = set()
        derivs_fail = set()
        self.derivs_done = set()
        derivs_all = set()

        self.s = s

        # Add the full AMR to start with
        derivs_cur.add(CanonicalDerivation([s['mrt']]))

        while len(derivs_cur) > 0:
            derivation = derivs_cur.pop()
            if len(derivation.get_triples()) == 1 and derivation.get_triples(
            )[0][1].isNonterminal():
                self.derivs_done.add(derivation)
                derivs_all.add(derivation)
            else:
                deriv = False

                for rule in [self.applyDelex,self.applySL,self.applySW, \
                        self.applySO,self.applyCircle,self.applyJointHit,self.applyElongate]:
                    deriv = rule(derivation)
                    if deriv: break

                # If we don't learn anything, add this derivation to the failures
                if not deriv:
                    derivs_fail.add(derivation)
                else:
                    # If we've seen this derivation before, don't go there again
                    if deriv not in derivs_all:
                        derivs_cur.add(deriv)
                derivs_all.add(deriv)

        self.derivs_done = list(self.derivs_done)
        self.derivs_fail = list(derivs_fail)
        #print "Failed derivations:   ", len(derivs_fail)
        print "Complete derivations: ", len(self.derivs_done)
        """