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]
def bow_embbedings_definicao(palavra, pos): from OxAPI import BaseOx from Alvaro import Alvaro descricao_definicoes = {} uniao_definicoes = set() for d in BaseOx.obter_definicoes(BaseOx.INSTANCE, palavra, pos=pos): d_sins = BaseOx.obter_sins(BaseOx.INSTANCE, palavra, d, pos=pos) correlatas = [] for s in d_sins: similares_tmp = [ reg[0] for reg in Alvaro.palavras_similares(s, pos) ] uniao_definicoes.update(similares_tmp) correlatas.append(similares_tmp) # Interseccao entre palavras da mesma definicao interseccao = set(correlatas[0]) for c in correlatas[:1]: interseccao = set(interseccao) & set(c) descricao_definicoes[d] = interseccao #for d in descricao_definicoes: # descricao_definicoes[d] = list(set(descricao_definicoes[d]) - set(uniao_definicoes)) descricao_definicoes_tmp = {} for d in descricao_definicoes: uniao_outros = set() for outro in descricao_definicoes: if outro != d: uniao_outros.update(descricao_definicoes[outro]) descricao_definicoes_tmp[d] = set( descricao_definicoes[d]) - uniao_outros descricao_definicoes_tmp[d] = list(descricao_definicoes_tmp[d]) uniao_outros = None return descricao_definicoes_tmp
def obter_frases_exemplo(palavra): ext = ExtratorWikipedia(None) url = Util.CONFIGS['wikipedia'][ 'url_desambiguacao'] % palavra.capitalize() duplicatas = set() frases_desambiguadads = {} todas_definicoes = {} instance = BaseOx.INSTANCE links_relevantes_tmp = ext.obter_links_relevantes_desambiguacao( url, palavra) pagina_desambiguacao = not links_relevantes_tmp in [None, [], {}] if pagina_desambiguacao == False: url = Util.CONFIGS['wikipedia'][ 'url_base_verbete'] + '/' + palavra.lower() links_relevantes_tmp = [url] links_relevantes_tmp = [ l for l in links_relevantes_tmp if not "dictiona" in l ] links_relevantes = [] todos_sins = [] lemas = {} url_lema = {} for def_iter in BaseOx.obter_definicoes(instance, palavra, pos=None): conj_sins = BaseOx.obter_sins(instance, palavra, def_iter, pos=None) todos_sins += conj_sins todos_sins = [palavra] + list(set(todos_sins)) for l in links_relevantes_tmp: for s in todos_sins: if s.lower() in l.lower() and not l in links_relevantes: links_relevantes.append(l) if not s.lower() in lemas: lemas[s.lower()] = [] lemas[s.lower()].append(l) url_lema[l] = s.lower() links_relevantes_tmp = None registros = [] for url in links_relevantes: if "wikipedia" in url: texto_wikipedia, todas_urls_referencias = ext.obter_texto( url, obter_referencias=True) plain_text = Util.completa_normalizacao(texto_wikipedia) if set(nltk.word_tokenize(plain_text)).intersection( set(todos_sins)): todas_sentencas = re.split('[.?!]', plain_text) descricao = todas_sentencas[0].replace('\n', ' ').strip(' ') todas_sentencas = todas_sentencas[1:] todas_sentencas = [ re.sub('[\s\n\t]', ' ', s) for s in todas_sentencas ] todas_sentencas = [ s for s in todas_sentencas if s.count(' ') > 1 ] for frase in todas_sentencas: if len(set(frase).intersection( set("<>{ }"))) > 0 or not '":"' in frase: if ExtratorWikipedia.filtrar_frase_bruta( frase, url_lema[url]) != None: nova_frase = frase.replace('\n', ' ').strip(' ') if not nova_frase in duplicatas: reg = palavra, descricao, url, nova_frase registros.append(reg) duplicatas.add(nova_frase) # Iterando referencias recuperadas for url_ref in todas_urls_referencias: for frase in ext.extrair_frases_pagina_comum( todas_urls_referencias, palavra): nova_frase = frase.replace('\n', ' ').strip(' ') if not nova_frase in duplicatas: reg = palavra, descricao, url + '@@@@' + url_ref, nova_frase registros.append(reg) duplicatas.add(nova_frase) return registros
def des_exemplos(self, ctx,\ ambigua, pos, nbest=True,\ lematizar=True, stem=True, stop=True,\ normalizar_pont=True): cfgs = self.cfgs dir_bases = self.cfgs['caminho_bases'] base_ox = self.base_ox rep_vet = self.rep_vetorial alvaro = Alvaro.Alvaro.INSTANCE dir_cache_rel_sinonimia = cfgs['caminho_bases'] + '/' + cfgs['oxford'][ 'cache']['sinonimia'] chave_cache_relacao_sin = "%s-%s.json" % (ambigua, pos) dir_obj = dir_cache_rel_sinonimia + '/' + chave_cache_relacao_sin if not chave_cache_relacao_sin in Util.list_arqs( dir_cache_rel_sinonimia): rel_definicoes = alvaro.construir_relacao_definicoes( ambigua, pos, fontes='oxford') Util.salvar_json(dir_obj, rel_definicoes) else: rel_definicoes = Util.abrir_json(dir_obj, criarsenaoexiste=False) res_des_tmp = [] pontuacao_somada = 0.00 for def_ambigua in rel_definicoes: uniao_palavras_sem_duplicatas = set() uniao_palavras_com_duplicatas = list() exemplos_blob = [] palavras_tf = {} try: maximo_exemplos = self.cfgs['params_exps']['qtde_exemplos'][0] lista_exemplos = BaseOx.obter_atributo(ambigua, pos, def_ambigua, 'exemplos') # Adicionando lemas lista_exemplos.append(" ".join( BaseOx.obter_sins(ambigua, def_ambigua, pos))) # Adicionando definicao lista_exemplos.append(def_ambigua) for ex in lista_exemplos[:maximo_exemplos]: ex_blob = TextBlob(ex) exemplos_blob.append(ex_blob) for token in ex_blob.words: if Util.is_stop_word(token.lower()) == False: token_lematizado = lemmatize(token) uniao_palavras_sem_duplicatas.add(token_lematizado) uniao_palavras_com_duplicatas.append( token_lematizado) except Exception, caminho: exemplos = [] textblob_vocab = TextBlob(" ".join(uniao_palavras_com_duplicatas)) palavras_latentes = [] for p in textblob_vocab.word_counts: if textblob_vocab.word_counts[p] > 1: palavras_latentes.append(p) palavras_derivadas = [] for p in uniao_palavras_sem_duplicatas: tf = alvaro.tf(p, textblob_vocab) palavras_tf[p] = tf pontuacao = 0.00 for t in Util.tokenize(Util.resolver_en(ctx).lower()): try: pontuacao += palavras_tf[t] except: pontuacao += 0.00 pontuacao_somada += pontuacao try: if normalizar_pont: reg_pont = pontuacao / sum(palavras_tf.values()) else: reg_pont = pontuacao except ZeroDivisionError, zde: reg_pont = 0.00
definicoes_caminho = [ tuple(r.split(":::")) for r in reg_caminhos.split("/") ] # Percorrendo todos caminhos nas arvores de sinonimos for lema_caminho, def_caminho in definicoes_caminho: try: # Adicionando caminho novos_ex = BaseOx.obter_atributo(BaseOx.INSTANCE,\ lema_caminho, pos, def_caminho, 'exemplos') novos_ex = list(novos_ex) lista_exemplos += novos_ex except: lista_exemplos = [] # Adicionando lemas sins_defcaminho = BaseOx.obter_sins( BaseOx.INSTANCE, lema_caminho, def_caminho, pos) if sins_defcaminho: lista_exemplos.append(" ".join(sins_defcaminho)) # Adicionando definicao lista_exemplos.append(def_caminho) for ex_iter in lista_exemplos[:maximo_exemplos]: ex = ex_iter ex_blob = TextBlob(ex) exemplos_blob.append(ex_blob) for token in ex_blob.words: if Util.is_stop_word(token.lower()) == False: