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
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