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 fill_func(linkage, indexes): """ Нахождение слов в структуре предложения по индексам и удаление приписок Аргументы: linkage - структура предложения выданная парсером indexes - индексы слов в предложении Возвращаемое значение: string - строка слов без приписок """ string = "" voc = {'main': "", 'atr': []} atr = [] for i in indexes: tmp = str(clg.linkage_get_word(linkage, i)) if (tmp.find("[") > 0): ind = tmp.find("[") else: ind = tmp.find(".") mor = morph.parse(tmp[:ind])[0] if mor.tag.POS == 'NPRO' or mor.tag.POS == 'PRED' or mor.tag.POS == 'PREP' or mor.tag.POS == 'CONJ' or mor.tag.POS == 'PRCL' or mor.tag.POS == 'INTJ': continue string = mor.normal_form if voc.get('main') == "": voc['main'] = string else: atr.append(string) voc['atr'] = atr return voc
def word(self, i): return clg.linkage_get_word(self._obj, i)