Ricerca di parole in Wordnet
Cos'è Wordnet?
Wordnet è un grande database lessicale di inglese, creato da Princeton. Fa parte del corpus NLTK. Nomi, verbi, aggettivi e avverbi sono tutti raggruppati in un insieme di synset, cioè sinonimi cognitivi. Qui ogni set di synset esprime un significato distinto. Di seguito sono riportati alcuni casi d'uso di Wordnet:
- Può essere utilizzato per cercare la definizione di una parola
- Possiamo trovare sinonimi e contrari di una parola
- Le relazioni e le somiglianze tra le parole possono essere esplorate utilizzando Wordnet
- Disambiguazione del senso delle parole per quelle parole che hanno molteplici usi e definizioni
Come importare Wordnet?
Wordnet può essere importato con l'aiuto del seguente comando:
from nltk.corpus import wordnet
Per un comando più compatto, utilizzare quanto segue:
from nltk.corpus import wordnet as wn
Istanze di Synset
Synset sono raggruppamenti di parole sinonimi che esprimono lo stesso concetto. Quando usi Wordnet per cercare le parole, otterrai un elenco di istanze di Synset.
wordnet.synsets (word)
Per ottenere un elenco di Synset, possiamo cercare qualsiasi parola in Wordnet utilizzando wordnet.synsets(word). Ad esempio, nella prossima ricetta di Python, cercheremo il Synset per il 'cane' insieme ad alcune proprietà e metodi di Synset -
Esempio
Innanzitutto, importa il wordnet come segue:
from nltk.corpus import wordnet as wn
Ora, fornisci la parola per cui vuoi cercare il Synset -
syn = wn.synsets('dog')[0]
Qui, stiamo usando il metodo name () per ottenere il nome univoco per il synset che può essere usato per ottenere direttamente il Synset -
syn.name()
Output:
'dog.n.01'
Successivamente, stiamo usando il metodo definition () che ci darà la definizione della parola -
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'
Un altro metodo è examples () che ci fornirà gli esempi relativi alla parola -
syn.examples()
Output:
['the dog barked all night']
Esempio di implementazione completo
from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.name()
syn.definition()
syn.examples()
Ottenere gli ipernimi
I synset sono organizzati in una struttura ad albero di ereditarietà in cui Hypernyms rappresenta termini più astratti mentre Hyponymsrappresenta i termini più specifici. Una delle cose importanti è che questo albero può essere ricondotto fino a un hypernym radice. Cerchiamo di comprendere il concetto con l'aiuto del seguente esempio:
from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()
Produzione
[Synset('canine.n.02'), Synset('domestic_animal.n.01')]
Qui, possiamo vedere che canine e domestic_animal sono gli iperonimi di "cane".
Ora possiamo trovare iponimi di "cane" come segue:
syn.hypernyms()[0].hyponyms()
Produzione
[
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')
]
Dall'output di cui sopra, possiamo vedere che "cane" è solo uno dei tanti iponimi di "domestic_animals".
Per trovare la radice di tutti questi, possiamo usare il seguente comando:
syn.root_hypernyms()
Produzione
[Synset('entity.n.01')]
Dall'output di cui sopra, possiamo vedere che ha solo una radice.
Esempio di implementazione completo
from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()
syn.hypernyms()[0].hyponyms()
syn.root_hypernyms()
Produzione
[Synset('entity.n.01')]
Lemma in Wordnet
In linguistica, la forma canonica o la forma morfologica di una parola è chiamata lemma. Per trovare un sinonimo e un antonimo di una parola, possiamo anche cercare i lemmi in WordNet. Vediamo come.
Trovare sinonimi
Utilizzando il metodo lemma (), possiamo trovare il numero di sinonimi di un Synset. Applichiamo questo metodo al synset "cane" -
Esempio
from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
lemmas = syn.lemmas()
len(lemmas)
Produzione
3
L'output precedente mostra che "cane" ha tre lemmi.
Ottenere il nome del primo lemma come segue:
lemmas[0].name()
Output:
'dog'
Ottenere il nome del secondo lemma come segue:
lemmas[1].name()
Output:
'domestic_dog'
Ottenere il nome del terzo lemma come segue:
lemmas[2].name()
Output:
'Canis_familiaris'
In realtà, un Synset rappresenta un gruppo di lemmi che hanno tutti un significato simile mentre un lemma rappresenta una forma di parola distinta.
Trovare contrari
In WordNet, alcuni lemmi hanno anche contrari. Ad esempio, la parola "buono" ha un totale di 27 sineti, tra cui 5 hanno lemmi con contrari. Cerchiamo di trovare i contrari (quando la parola "buono" usata come nome e quando la parola "buono" usata come aggettivo).
Esempio 1
from nltk.corpus import wordnet as wn
syn1 = wn.synset('good.n.02')
antonym1 = syn1.lemmas()[0].antonyms()[0]
antonym1.name()
Produzione
'evil'
antonym1.synset().definition()
Produzione
'the quality of being morally wrong in principle or practice'
L'esempio sopra mostra che la parola "buono", quando usata come sostantivo, ha il primo antonimo "cattivo".
Esempio 2
from nltk.corpus import wordnet as wn
syn2 = wn.synset('good.a.01')
antonym2 = syn2.lemmas()[0].antonyms()[0]
antonym2.name()
Produzione
'bad'
antonym2.synset().definition()
Produzione
'having undesirable or negative qualities’
L'esempio sopra mostra che la parola "buono", quando usata come aggettivo, ha il primo antonimo "cattivo".