Esempio n. 1
0
    def iniciar_casamento(self, termo, pos, corrigir=False):
        if corrigir:
            del self.base_casada_manualmente[termo]

        if not termo in self.base_casada_manualmente:
            self.base_casada_manualmente[termo] = {}

        if not wn.synsets(
                unicode(termo),
                pos)[0].name() in self.base_casada_manualmente[termo]:
            obj_oxford = BaseOx.construir_objeto_unificado(termo)
            pos_oxford = Util.cvrsr_pos_wn_oxford(pos)

            try:
                obj_oxford = obj_oxford[pos_oxford]
            except TypeError:
                print('A POS %s para o termo %s nao foi encontrada!' %
                      (pos_oxford, termo))
                return

            for synset in wn.synsets(unicode(termo), pos):
                self.base_casada_manualmente[termo][synset.name()] = []

                print('\n\n')
                print('\t' + str((str(termo), str(pos))))
                print('\t' + synset.definition().upper() + '\n')

                indice = 1
                definicoes_indexadas = []
                for definicao in obj_oxford:
                    definicoes_indexadas.append(definicao)
                    print('\n\t\t' + str(indice) + ' - ' + repr(definicao) +
                          '\n')
                    indice += 1
                    for def_sec_iter in obj_oxford[definicao]['def_secs']:
                        def_sec = def_sec_iter.encode('utf8')
                        definicoes_indexadas.append(def_sec)
                        print('\t\t' + str(indice) + ' - ' + repr(def_sec))
                        indice += 1

                valores = self.ler_inteiros('\n\tINDICES: ')
                print('\tAnotacao > ' + str(valores))
                print('\n\n')

                for v in valores:
                    try:
                        self.base_casada_manualmente[termo][
                            synset.name()].append(definicoes_indexadas[v - 1])
                    except IndexError:
                        pass

            dir_saida = self.diretorio_base_casada_manualmente
            Util.salvar_json(dir_saida, self.base_casada_manualmente)
Esempio n. 2
0
    def recuperar_exemplos(self, nome_synset=""):
        termo = wn.synset(nome_synset).lemma_names()[0]
        pos_oxford = wn.synset(nome_synset).pos()
        pos_oxford = Util.cvrsr_pos_wn_oxford(pos_oxford)

        try:
            obj_unificado = BaseOx.construir_objeto_unificado(
                termo)[pos_oxford]
        except:
            print('Excecao: ' + str((termo, pos_oxford)))
            obj_unificado = None

        try:
            definicoes_oxford = self.base_casada_manualmente[termo][
                nome_synset]
        except:
            print(
                'Excecao! Nao foram encontradas definicoes para o (%s, %s) na base casada manualmente!'
                % (termo, nome_synset))
            definicoes_oxford = None

        if definicoes_oxford:
            lista_definicoes = []

            for def_principal in obj_unificado:
                reg = ("", def_principal,
                       obj_unificado[def_principal]['exemplos'])
                lista_definicoes.append(reg)
                for def_sec in obj_unificado[def_principal]['def_secs']:
                    reg = ("", def_sec, obj_unificado[def_principal]
                           ['def_secs'][def_sec]['exemplos'])
                    lista_definicoes.append(reg)

            for nome_def, definicao, exemplos in lista_definicoes:
                if definicao in definicoes_oxford:
                    return exemplos

        return []
Esempio n. 3
0
    def assinatura_significado(self, lema, lematizar=True,\
                            stem=False, stop=True,\
                            extrair_relacao_semantica=False,\
                            usar_exemplos=False):

        resultado = BaseOx.construir_objeto_unificado(self.base_ox, lema)

        if not resultado:
            resultado = {}

        lema = lemmatize(lema)

        assinaturas_significados = []  # (nome, definicao, exemplos)

        for pos in resultado.keys():
            todos_significados = resultado[pos].keys()

            indice = 1
            for sig in todos_significados:
                nome_sig = "%s.%s.%d" % (lema, pos, indice)
                indice += 1

                if usar_exemplos:
                    exemplos = resultado[pos][sig]['exemplos']
                else:
                    exemplos = []

                # nome, definicao, exemplos, assinatura
                definicao_corrente = [nome_sig, sig, exemplos, []]
                assinaturas_significados.append(definicao_corrente)

                # Colocando exemplos na assinatura
                definicao_corrente[len(definicao_corrente) -
                                   1] += self.assinatura_significado_aux(
                                       lema, pos, sig, exemplos)

                sig_secundarios = resultado[pos][sig]['def_secs']

                for ss in sig_secundarios:
                    nome_sig_sec = "%s.%s.%d" % (lema, pos, indice)

                    if usar_exemplos:
                        exemplos_secundarios = resultado[pos][sig]['def_secs'][
                            ss]['exemplos']
                    else:
                        exemplos_secundarios = []

                    definicao_corrente_sec = [
                        nome_sig_sec, ss, exemplos_secundarios, []
                    ]
                    assinaturas_significados.append(definicao_corrente_sec)

                    definicao_corrente_sec[
                        len(definicao_corrente) -
                        1] += self.assinatura_significado_aux(
                            lema, pos, ss, exemplos_secundarios)

                    indice += 1

        for sig in assinaturas_significados:
            sig[3] = Util.normalizar_ctx(sig[3],
                                         stop=True,
                                         lematizar=True,
                                         stem=True)

        return [tuple(a) for a in assinaturas_significados]