Procurando palavras no Wordnet

O que é Wordnet?

Wordnet é um grande banco de dados lexical do inglês, que foi criado por Princeton. Faz parte do corpus NLTK. Substantivos, verbos, adjetivos e advérbios, todos são agrupados em conjuntos de synsets, ou seja, sinônimos cognitivos. Aqui, cada conjunto de synsets expressa um significado distinto. A seguir estão alguns casos de uso do Wordnet -

  • Pode ser usado para pesquisar a definição de uma palavra
  • Podemos encontrar sinônimos e antônimos de uma palavra
  • Relações de palavras e semelhanças podem ser exploradas usando Wordnet
  • Desambiguação do sentido de palavra para aquelas palavras com múltiplos usos e definições

Como importar Wordnet?

Wordnet pode ser importado com a ajuda do seguinte comando -

from nltk.corpus import wordnet

Para um comando mais compacto, use o seguinte -

from nltk.corpus import wordnet as wn

Instâncias Synset

Synset são agrupamentos de palavras sinônimos que expressam o mesmo conceito. Ao usar o Wordnet para pesquisar palavras, você obterá uma lista de ocorrências de Synset.

wordnet.synsets (palavra)

Para obter uma lista de Synsets, podemos procurar qualquer palavra no Wordnet usando wordnet.synsets(word). Por exemplo, na próxima receita do Python, vamos procurar o Synset para o 'cachorro' junto com algumas propriedades e métodos de Synset -

Exemplo

Primeiro, importe o wordnet da seguinte forma -

from nltk.corpus import wordnet as wn

Agora, forneça a palavra que você deseja procurar no Synset -

syn = wn.synsets('dog')[0]

Aqui, estamos usando o método name () para obter o nome exclusivo para o synset que pode ser usado para obter o Synset diretamente -

syn.name()
Output:
'dog.n.01'

Em seguida, estamos usando o método definition () que nos dará a definição da palavra -

syn.definition()
Output:
'a member of the genus Canis (probably descended from the common wolf) that has
been domesticated by man since prehistoric times; occurs in many breeds'

Outro método é o examples () que nos dará os exemplos relacionados à palavra -

syn.examples()
Output:
['the dog barked all night']

Exemplo de implementação completo

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.name()
syn.definition()
syn.examples()

Obtendo Hypernyms

Synsets são organizados em uma estrutura semelhante a uma árvore de herança na qual Hypernyms representa termos mais abstratos enquanto Hyponymsrepresenta os termos mais específicos. Uma das coisas importantes é que essa árvore pode ser rastreada até um hiperônimo raiz. Vamos entender o conceito com a ajuda do seguinte exemplo -

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()

Resultado

[Synset('canine.n.02'), Synset('domestic_animal.n.01')]

Aqui, podemos ver que canino e domestic_animal são os hiperônimos de 'cão'.

Agora, podemos encontrar hipônimos de 'cachorro' da seguinte forma -

syn.hypernyms()[0].hyponyms()

Resultado

[
   Synset('bitch.n.04'),
   Synset('dog.n.01'),
   Synset('fox.n.01'),
   Synset('hyena.n.01'),
   Synset('jackal.n.01'),
   Synset('wild_dog.n.01'),
   Synset('wolf.n.01')
]

Pela saída acima, podemos ver que 'cachorro' é apenas um dos muitos hipônimos de 'animais_ domésticos'.

Para encontrar a raiz de tudo isso, podemos usar o seguinte comando -

syn.root_hypernyms()

Resultado

[Synset('entity.n.01')]

Pela saída acima, podemos ver que ele tem apenas uma raiz.

Exemplo de implementação completo

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()
syn.hypernyms()[0].hyponyms()
syn.root_hypernyms()

Resultado

[Synset('entity.n.01')]

Lemas em Wordnet

Em linguística, a forma canônica ou morfológica de uma palavra é chamada de lema. Para encontrar um sinônimo e um antônimo de uma palavra, também podemos pesquisar lemas no WordNet. Vamos ver como.

Encontrando Sinônimos

Usando o método lemma (), podemos encontrar o número de sinônimos de um Synset. Vamos aplicar este método no synset 'dog' -

Exemplo

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
lemmas = syn.lemmas()
len(lemmas)

Resultado

3

A saída acima mostra que 'cachorro' tem três lemas.

Obtendo o nome do primeiro lema da seguinte maneira -

lemmas[0].name()
Output:
'dog'

Obtendo o nome do segundo lema da seguinte maneira -

lemmas[1].name()
Output:
'domestic_dog'

Obtendo o nome do terceiro lema da seguinte maneira -

lemmas[2].name()
Output:
'Canis_familiaris'

Na verdade, um Synset representa um grupo de lemas que possuem significados semelhantes, enquanto um lema representa uma forma de palavra distinta.

Encontrando antônimos

No WordNet, alguns lemas também têm antônimos. Por exemplo, a palavra 'bom' tem um total de 27 sinets, entre eles, 5 possuem lemas com antônimos. Vamos encontrar os antônimos (quando a palavra 'bom' é usada como substantivo e quando a palavra 'bom' é usada como adjetivo).

Exemplo 1

from nltk.corpus import wordnet as wn
   syn1 = wn.synset('good.n.02')
   antonym1 = syn1.lemmas()[0].antonyms()[0]
antonym1.name()

Resultado

'evil'
antonym1.synset().definition()

Resultado

'the quality of being morally wrong in principle or practice'

O exemplo acima mostra que a palavra 'bom', quando usada como substantivo, tem o primeiro antônimo 'mal'.

Exemplo 2

from nltk.corpus import wordnet as wn
   syn2 = wn.synset('good.a.01')
   antonym2 = syn2.lemmas()[0].antonyms()[0]
antonym2.name()

Resultado

'bad'
antonym2.synset().definition()

Resultado

'having undesirable or negative qualities’

O exemplo acima mostra que a palavra 'bom', quando usada como adjetivo, tem o primeiro antônimo 'ruim'.