Buscando palabras en Wordnet

¿Qué es Wordnet?

Wordnet es una gran base de datos léxica del inglés, que fue creada por Princeton. Es parte del corpus NLTK. Los sustantivos, verbos, adjetivos y adverbios se agrupan en un conjunto de synsets, es decir, sinónimos cognitivos. Aquí, cada conjunto de synsets expresa un significado distinto. A continuación se muestran algunos casos de uso de Wordnet:

  • Se puede usar para buscar la definición de una palabra.
  • Podemos encontrar sinónimos y antónimos de una palabra.
  • Las relaciones de palabras y las similitudes se pueden explorar utilizando Wordnet
  • Desambiguación del sentido de las palabras para aquellas palabras que tienen múltiples usos y definiciones

¿Cómo importar Wordnet?

Wordnet se puede importar con la ayuda del siguiente comando:

from nltk.corpus import wordnet

Para un comando más compacto, use lo siguiente:

from nltk.corpus import wordnet as wn

Instancias de Synset

Synset son agrupaciones de palabras sinónimas que expresan el mismo concepto. Cuando use Wordnet para buscar palabras, obtendrá una lista de instancias de Synset.

wordnet.synsets (palabra)

Para obtener una lista de Synsets, podemos buscar cualquier palabra en Wordnet usando wordnet.synsets(word). Por ejemplo, en la próxima receta de Python, buscaremos en Synset el 'perro' junto con algunas propiedades y métodos de Synset:

Ejemplo

Primero, importe wordnet de la siguiente manera:

from nltk.corpus import wordnet as wn

Ahora, proporcione la palabra que desea buscar en Synset:

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

Aquí, estamos usando el método name () para obtener el nombre único del synset que se puede usar para obtener el Synset directamente -

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

A continuación, estamos usando el método definition () que nos dará la definición de la palabra -

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'

Otro método es examples () que nos dará los ejemplos relacionados con la palabra -

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

Ejemplo de implementación completo

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

Conseguir hipernimos

Los Synsets están organizados en una estructura de árbol de herencia en la que Hypernyms representa términos más abstractos mientras Hyponymsrepresenta los términos más específicos. Una de las cosas importantes es que este árbol se puede rastrear hasta un hiperónimo raíz. Entendamos el concepto con la ayuda del siguiente ejemplo:

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

Salida

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

Aquí, podemos ver que canine y domestic_animal son los hiperónimos de 'perro'.

Ahora, podemos encontrar los hipónimos de 'perro' de la siguiente manera:

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

Salida

[
   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')
]

De la salida anterior, podemos ver que 'perro' es solo uno de los muchos hipónimos de 'domestic_animals'.

Para encontrar la raíz de todos estos, podemos usar el siguiente comando:

syn.root_hypernyms()

Salida

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

De la salida anterior, podemos ver que solo tiene una raíz.

Ejemplo de implementación completo

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

Salida

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

Lemas en Wordnet

En lingüística, la forma canónica o morfológica de una palabra se llama lema. Para encontrar un sinónimo y un antónimo de una palabra, también podemos buscar lemas en WordNet. Veamos cómo.

Encontrar sinónimos

Usando el método lemma (), podemos encontrar el número de sinónimos de un Synset. Apliquemos este método en synset 'perro' -

Ejemplo

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

Salida

3

La salida anterior muestra que 'perro' tiene tres lemas.

Obtener el nombre del primer lema de la siguiente manera:

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

Obteniendo el nombre del segundo lema de la siguiente manera:

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

Obteniendo el nombre del tercer lema de la siguiente manera:

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

En realidad, un Synset representa un grupo de lemas que tienen todos un significado similar, mientras que un lema representa una forma de palabra distinta.

Encontrar antónimos

En WordNet, algunos lemas también tienen antónimos. Por ejemplo, la palabra 'bueno' tiene un total de 27 synets, entre ellos, 5 tienen lemas con antónimos. Busquemos los antónimos (cuando la palabra 'bueno' se usa como sustantivo y cuando la palabra 'bueno' se usa como adjetivo).

Ejemplo 1

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

Salida

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

Salida

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

El ejemplo anterior muestra que la palabra "bueno", cuando se usa como sustantivo, tiene el primer antónimo "mal".

Ejemplo 2

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

Salida

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

Salida

'having undesirable or negative qualities’

El ejemplo anterior muestra que la palabra "bueno", cuando se usa como adjetivo, tiene el primer antónimo "malo".