def obter_sins_nv(self, palavra, definicao, sins_def, pos=None): caminhos_candidatos = [] caminhos_dict = {} sins_nouns = [] # Melhor sinonimo for h in sins_def: for sh in wn.synsets(h, pos): for s in wn.synsets(palavra, pos): if sh in s.lowest_common_hypernyms(sh): if not s.name() in caminhos_dict: caminhos_dict[s.name()] = [] caminhos_dict[s.name()].append(sh) sins_h = [(s, RV.word_move_distance(RV.INSTANCE, wn.synset(s).definition(), definicao)) for s in caminhos_dict] sins_h = sorted(sins_h, key=lambda x: x[1], reverse=False) if sins_h: melhor_synset = sins_h[0][0] sins_h = caminhos_dict[melhor_synset] melhor_synset = wn.synset(melhor_synset) sins_h = [(hs, melhor_synset, melhor_synset.shortest_path_distance(hs)) for hs in sins_h] hiper, hipo = tuple( sorted(sins_h, key=lambda x: x[2], reverse=False)[0][:2]) menor_caminho = self.menor_caminho_synsets(hipo, hiper) for synset in menor_caminho: sins_nouns += [ l for l in synset.lemma_names() if not Util.e_mpalavra(l) ] if palavra in sins_nouns: sins_nouns.remove(palavra) # fim do melhor caminho ao hiperonimo conj_lemas = set() for s in wn.synsets(palavra, pos): for shiper in s.hypernyms(): conj_lemas.update(shiper.lemma_names()) for shipo in s.hyponyms(): conj_lemas.update(shipo.lemma_names()) for s in wn.synsets(palavra, pos): for caminho_hiper in s.hypernym_paths(): for sh in caminho_hiper: conj_lemas.update( set(set(set(sins_def) & set(sh.lemma_names())))) lista_sins = [ p for p in sins_def if p in conj_lemas and Util.e_mpalavra(p) == False ] return list(set(lista_sins + sins_nouns))
def predicao_usual(frase, palavra, pos, fonte='oxford'): conjunto = [] if fonte == 'oxford': inst = BaseOx.INSTANCE for d in BaseOx.obter_definicoes(inst, palavra, pos): for s in BaseOx.obter_sins(inst, palavra, d, pos): if s != palavra: conjunto.append(s) elif fonte == 'wordnet': for s in wn.synsets(palavra, pos): for l in s.lemma_names(): if palavra != l: if Util.e_mpalavra(l): conjunto.append(l) return [p for p in conjunto if Util.e_mpalavra(p) == False]
continuar = bool(resultado) while len(sinonimos) < max_sinonimos and continuar: len_sinonimos = len(sinonimos) for item in resultado: definicao, pontuacao = item[0][1], item[1] if len(sinonimos) < max_sinonimos: try: obj_unificado = obter_objeto_unificado_oxford(palavra) sinonimos_tmp = obter_sinonimos_oxford( pos, definicao, obj_unificado) sinonimos_tmp = [ s for s in sinonimos_tmp if not Util.e_mpalavra(s) ] sinonimos_tmp = list( set(sinonimos_tmp) - set(sinonimos)) if coletar_todos: sinonimos += sinonimos_tmp elif sinonimos_tmp: sinonimos += [sinonimos_tmp[0]] except: pass else: continuar = False if repetir == False:
def extrair_sinonimos(self, ctx, palavra, pos=None, \ usar_exemplos=False, busca_ampla=False, \ repetir=True, coletar_todos=True): max_sinonimos = 10 print('Executando desambiguador Wordnet...') resultado = self.adapted_cosine_lesk(ctx, palavra, pos, busca_ampla=busca_ampla) print('Desambiguador executado...\n') sinonimos = [] try: if resultado[0][1] == 0: resultado = [resultado[0]] repetir = False if False: sinonimos = [] try: for synset in [s[0] for s in resultado]: for lema in synset.lemma_names(): if not l in sinonimos: sinonimos.append(l) except: pass return sinonimos[:max_sinonimos] else: resultado = [item for item in resultado if item[1] > 0] except: resultado = [] continuar = bool(resultado) while len(sinonimos) < max_sinonimos and continuar: len_sinonimos = len(sinonimos) for item in resultado: synset, pontuacao = item if len(sinonimos) < max_sinonimos: try: sinonimos_tmp = [ s for s in synset.lemma_names() if not Util.e_mpalavra(s) ] sinonimos_tmp = list( set(sinonimos_tmp) - set(sinonimos)) if coletar_todos: sinonimos += sinonimos_tmp elif sinonimos_tmp: sinonimos += [sinonimos_tmp[0]] except: pass else: continuar = False if repetir == False: continuar = False elif len_sinonimos == len(sinonimos): continuar = False return sinonimos[:max_sinonimos]