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]
Esempio n. 2
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
                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: