예제 #1
0
    def determine_object_from_dobj(self, verb, dependencies):

        objects = []

        dobjs = Search.find_dependencies(dependencies, DOBJ)
        dobjs_filtered = Search.filter_by_gov(dobjs, verb)

        if len(dobjs_filtered) == 0:
            if not verb.f_xcomp or not verb.f_xcomp.f_object:
                for conj in self.f_analyzed_sentence.f_conjs:
                    if conj.f_to == verb:
                        dobjs_filtered = [dep for dep in dobjs if conj.f_to.f_word_index < dep['dependent']]
                    else:
                        dobjs_filtered = [dep for dep in dobjs if conj.f_from.f_word_index < dep['dependent']]

        if len(dobjs_filtered) == 0:
            preps = Search.find_dependencies(dependencies, PREP)
            preps_filtered = []
            for dep in preps:
                if dep['governorGloss'] in verb.f_name \
                        and dep['governor'] > verb.f_word_index:
                    preps_filtered.append(dep)

            if len(preps_filtered) == 0:
                cops = Search.find_dependencies(dependencies, COP)
                if len(cops) == 0:
                    self.logger.debug("No Object found")
                elif len(cops) > 1:
                    self.logger.info("Sentence with more than one copula object!")
                    self.logger.debug(cops)
                else:
                    dep_index = cops[0]['governor']
                    dep_in_tree = Search.find_dep_in_tree(self.f_full_sentence, dep_index)
                    if dep_in_tree.parent().label() == NP:
                        obj = Builder.create_object(self.f_stanford_sentence, self.f_full_sentence, dep_index, dependencies)
                        objects.append(obj)
                        self.check_np_sub_sentences(dep_index, dependencies, obj)
                    else:
                        self.logger.debug("No object found")
            elif len(preps_filtered) > 1:
                self.logger.info("Sentence with more than one prepositional object!")
                self.logger.debug(preps_filtered)
            else:
                dep_index = preps_filtered[0]['dependent']
                dep_in_tree = Search.find_dep_in_tree(self.f_full_sentence, dep_index)
                if dep_in_tree.parent().label() == NP:
                    obj = Builder.create_object(self.f_stanford_sentence, self.f_full_sentence, dep_index, dependencies)
                    objects.append(obj)
                    self.check_np_sub_sentences(dep_index, dependencies, obj)
                else:
                    self.logger.debug("No object found")
        else:
            dep_index = dobjs_filtered[0]['dependent']
            obj = Builder.create_object(self.f_stanford_sentence, self.f_full_sentence, dep_index, dependencies)
            objects.append(obj)
            self.check_np_sub_sentences(dep_index, dependencies, obj)

        return objects
예제 #2
0
    def check_conjunctions(self, dependencies, element, obj, actor, active):
        results = []
        conjs = Search.find_dependencies(dependencies, CONJ)
        cops = Search.find_dependencies(dependencies, COP)

        if len(conjs) > 0:
            action = element if isinstance(element, Action) else None
            for conj in conjs:
                x_comp_hit = True if action and action.f_xcomp and conj['governorGloss'] in action.f_xcomp.f_baseForm else False
                if (conj['governorGloss'] == element.f_name
                    and len(Search.filter_by_gov(cops, conj['governor'])) == 0) \
                        or x_comp_hit:
                    dep_index = conj['dependent']
                    if obj:
                        if actor:
                            new_ele = Builder.create_actor(
                                self.f_stanford_sentence,
                                self.f_full_sentence, dep_index,
                                dependencies)
                        else:
                            new_ele = Builder.create_object(
                                self.f_stanford_sentence,
                                self.f_full_sentence, dep_index,
                                dependencies)
                            self.check_np_sub_sentences(dep_index, dependencies, new_ele)
                    else:
                        if x_comp_hit:
                            new_ele = copy(action)
                            new_ele.f_xcomp = Builder.create_action(
                                self.f_stanford_sentence, self.f_full_sentence,
                                dep_index, dependencies, True)
                        else:
                            new_ele = Builder.create_action(
                                self.f_stanford_sentence, self.f_full_sentence,
                                dep_index, dependencies, active)

                    if conj['dependent'] != conj['governor']:
                        results.append(new_ele)
                        self.build_link(element, conj, new_ele)

        return results