コード例 #1
0
    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))
コード例 #2
0
    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]
コード例 #3
0
        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:
コード例 #4
0
    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]