NLTK WordNet: trova sinonimi da NLTK WordNet in Python
Cos'è Wordnet?
Wordnet è un lettore di corpus NLTK, un database lessicale per l'inglese. Può essere utilizzato per trovare il significato di parole, sinonimi o contrari. Si può definire come un dizionario di inglese orientato semanticamente. Si importa con il seguente comando:
from nltk.corpus import wordnet as guru
Trova sinonimi da NLTK WordNet in Python
Le statistiche rivelano che ci sono 155287 parole e 117659 sinonimi set inclusi con WordNet inglese.
È possibile trovare diversi metodi disponibili con WordNet digitando dir(guru)
['_LazyCorpusLoader__args', '_LazyCorpusLoader__kwargs', '_LazyCorpusLoader__load', '_LazyCorpusLoader__name', '_LazyCorpusLoader__reader_cls', '__class__', '__delattr__', '__dict__', '__dir__', '__ doc__', '__eq__', '__format__', ' __GE__ ',' __geTattr__ ',' __getAttribute__ ',' __gt__ ',' __hash__ ',' __init__ ',' __le__ '', '__lt__', '__module__', '__name__', '__ne__', '__New__', '__Duce__' , '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', '_unload', 'subdir', 'unicode_repr']
Cerchiamo di comprendere alcune delle funzionalità disponibili con Wordnet:
synset: Viene anche chiamato insieme di sinonimi o raccolta di parole sinonimiche. Controlliamo un esempio
from nltk.corpus import wordnet syns = wordnet.synsets("dog") print(syns)
Produzione:
[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')]
Relazioni lessicali: Queste sono relazioni semantiche reciproche. Se esiste una relazione tra {x1,x2,…xn} e {y1,y2,…yn} allora esiste anche una relazione tra {y1,y2,…yn} e {x1,x2,…xn}. Ad esempio, il sinonimo è l'opposto dell'antonimo o gli iperonimi e gli iponimi sono un tipo di concetto lessicale.
Scriviamo un programma utilizzando python per trovare sinonimo e contrario della parola “attivo” utilizzando 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))
L'output del codice:
{'dynamic', 'fighting', 'combat-ready', 'active_voice', 'active_agent', 'participating', 'alive', 'active'} — Sinonimo
{'stativo', 'passivo', 'tranquillo', 'passive_voice', 'estinto', 'dormiente', 'inattivo'} — Contrario
Spiegazione del codice
- Wordnet è un corpus, quindi viene importato da ntlk.corpus
- L'elenco dei sinonimi e dei contrari viene considerato vuoto e verrà utilizzato per l'aggiunta
- I sinonimi della parola attivo vengono cercati nel modulo synsets e vengono aggiunti nell'elenco dei sinonimi. Lo stesso procedimento si ripete per il secondo.
- L'output viene stampato
Conclusione
WordNet è un database lessicale utilizzato da una major motore di ricerca. Da WordNet è possibile calcolare informazioni su una determinata parola o frase, ad esempio
- sinonimo (parole con lo stesso significato)
- iperonimi (il termine generico utilizzato per designare una classe di dettagli (ad esempio, il pasto è una colazione), iponimi (il riso è un pasto)
- olonimi (proteine, carboidrati fanno parte del pasto)
- meronimi (il pasto fa parte dell'assunzione alimentare giornaliera)
WordNet fornisce anche informazioni su termini coordinati, derivati, sensi e altro ancora. Viene utilizzato per trovare le somiglianze tra due parole qualsiasi. Contiene anche informazioni sui risultati della parola correlata. In breve o in poche parole si può trattarlo come un dizionario o un thesaurus. Andando più in profondità in Wordnet, è diviso in quattro sottoreti totali come
- sostantivo
- Verbo
- Aggettivo
- Avverbio
Può essere utilizzato nel campo dell'intelligenza artificiale per l'analisi del testo. Con l'aiuto di Wordnet, puoi creare il tuo corpus per il controllo ortografico, la traduzione linguistica, il rilevamento dello spam e molto altro.
Allo stesso modo, puoi utilizzare questo corpus e modellarlo per far funzionare alcune funzionalità dinamiche. Questo è proprio come un corpus pronto per te. Puoi usarlo a modo tuo.