def select_linkage(sent, num_linkages): """ Поиск наиболее точной структуры предложения Аргументы: sent - предложение с пометками num_linkages - количество вариантов структур предложения Возвращаемое значение: linkage - структура предложения выданная парсером """ ind = 1 is_good = False is_v_or_n = False linkage = clg.linkage_create(0, sent, parse_opts) for num in range(clg.linkage_get_num_words(linkage)): if (clg.linkage_get_word(linkage, num).find(".v") >= 0 or clg.linkage_get_word(linkage, num).find(".n") >= 0): is_v_or_n = True while (ind < num_linkages and is_good == False): for i in range(clg.linkage_get_num_links(linkage)): if (clg.linkage_get_link_label(linkage, i).find("W") == 0): if (clg.linkage_get_word(linkage, clg.linkage_get_link_rword(linkage, i)).find(".v") >= 0 or clg.linkage_get_word(linkage, clg.linkage_get_link_rword(linkage, i)).find(".n") >= 0): is_good = True if (is_good == False and is_v_or_n == True and ind < num_linkages): clg.linkage_delete(linkage) linkage = clg.linkage_create(ind, sent, parse_opts) ind += 1 return linkage
def extract_func(line): """ Выделение действий, объектов и условий в преложении Аргументы: line - предложение Возвращаемое значение: dgh - действие объект условие """ actions_index = [] objects_index = [] conditions_index = [] dgh = {} sent = clg.sentence_create(line, lang_dict) if (len(line) > 2 and len(line) < 190): clg.sentence_split(sent, parse_opts) num_linkages = clg.sentence_parse(sent, parse_opts) if (num_linkages > 0): linkage = select_linkage(sent, num_linkages) diagram = clg.linkage_print_diagram(linkage, False, 800); num_link = clg.linkage_get_num_links(linkage) for i in range(num_link): link_analiz(i, linkage, actions_index, objects_index, conditions_index) dgh['d'] = fill_func(linkage, actions_index) dgh['g'] = fill_func(linkage, objects_index) dgh['h'] = fill_func(linkage, conditions_index) clg.linkage_delete(linkage) else: return dgh clg.sentence_delete(sent) return dgh
def __del__(self): if hasattr(self, '_obj'): clg.linkage_delete(self._obj) del self._obj