WordNet com NLTK: Encontrando sinônimos para palavras em Python

O que é Wordnet?

Wordnet é um leitor de corpus NLTK, um banco de dados léxico para o inglês. Ele pode ser usado para encontrar o significado de palavras, sinônimos ou antônimos. Pode-se defini-lo como um dicionário de inglês orientado semanticamente. É importado com o seguinte comando:

 from nltk.corpus import wordnet as guru 

As estatísticas revelam que existem 155287 palavras e 117659 sinônimo conjuntos incluídos no WordNet em inglês.

Diferentes métodos disponíveis com WordNet podem ser encontrados digitando dir (guru)

['_LazyCorpusLoader__args', '_LazyCorpusLoader__kwargs', '_LazyCorpusLoader__load', '_LazyCorpusLoader__nome', '_LazyCorpusLoader__reader_cls', '___dict__', '____dict,' ____dict, '____q_,' ____q_, '____q_,' ____q_, '____q_,' __ge__ ',' __getattr__ ',' __getattribute__ ',' __gt__ ',' __hash__ ',' __init__ ',' __le__ ',' __lt__ ',' __module__ ',' __name__ ',' __ne__ ',' ____reduzir ',' , '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', '_unload', 'subdir', 'unicode_repr']

Vamos entender alguns dos recursos disponíveis com o wordnet:

Synset : Também é chamado de conjunto de sinônimos ou coleção de palavras sinônimas. Vamos verificar um exemplo

 from nltk.corpus import wordnet syns = wordnet.synsets('dog') print(syns) 

Saída:

 [Synset('dog.n.01'), Synset('frump.n.01'), Synset('dog.n.03'), Synset('cad.n.01'), Synset('frank.n.02'), Synset('pawl.n.01'), Synset('andiron.n.01'), Synset('chase.v.01')] 

Relações Lexicais : Estas são relações semânticas que são recíprocas. Se houver uma relação entre {x1, x2, ... xn} e {y1, y2, ... yn}, então também haverá relação entre {y1, y2, ... yn} e {x1, x2 ,. ..xn}. Por exemplo, o sinônimo é o oposto de antônimo ou hiperônimo e o hipônimo é um tipo de conceito lexical.

Vamos escrever um programa usando python para encontrar o sinônimo e o antônimo da palavra 'ativo' usando o Wordnet.

 from nltk.corpus import wordnet synonyms = [] antonyms = [] for syn in wordnet.synsets('active'): for l in syn.lemmas(): synonyms.append(l.name()) if l.antonyms(): antonyms.append(l.antonyms()[0].name()) print(set(synonyms)) print(set(antonyms)) 

A saída do código:

{'dinâmico', 'lutando', 'pronto para o combate', 'voz_ativa', 'agente_ativo', 'participante', 'vivo', 'ativo'} - Sinônimo

{'stative', 'passive', 'quiet', 'passive_voice', 'extinto', 'dormente', 'inativo'} - Antônimo

Explicação do código

  1. Wordnet é um corpus, por isso é importado do ntlk.corpus
  2. A lista de sinônimos e antônimos é considerada vazia, o que será usado para anexar
  3. Sinônimos da palavra ativo são pesquisados ​​nos synsets do módulo e são anexados na lista de sinônimos. O mesmo processo é repetido para o segundo.
  4. A saída é impressa

Conclusão:

WordNet é um banco de dados léxico que tem sido usado por um grande mecanismo de busca. A partir da WordNet, as informações sobre uma determinada palavra ou frase podem ser calculadas, como

  • sinônimo (palavras com o mesmo significado)
  • hiperônimos (o termo genérico usado para designar uma classe de específicos (ou seja, refeição é um café da manhã), hipônimos (arroz é uma refeição)
  • holônimos (proteínas, carboidratos fazem parte da refeição)
  • merônimos (a refeição faz parte da ingestão alimentar diária)

A WordNet também fornece informações sobre termos coordenados, derivados, sentidos e muito mais. É usado para encontrar as semelhanças entre duas palavras quaisquer. Ele também contém informações sobre os resultados da palavra relacionada. Em suma, pode-se tratá-lo como Dicionário ou Thesaurus. Indo mais fundo no wordnet, ele é dividido em quatro sub-redes totais, como

  1. Substantivo
  2. Verbo
  3. Adjetivo
  4. Advérbio

Pode ser usado na área de inteligência artificial para análise de textos. Com a ajuda do Wordnet, você pode criar seu corpus para verificação ortográfica, tradução de idiomas, detecção de spam e muito mais.

Da mesma forma, você pode usar este corpus e moldá-lo para trabalhar algumas funcionalidades dinâmicas. Isso é como um corpus pronto para você. Você pode usá-lo do seu jeito.