NLTK WordNet: Find synonymer fra NLTK WordNet i Python
Hvad er Wordnet?
Wordnet er en NLTK-korpuslæser, en leksikalsk database for engelsk. Det kan bruges til at finde betydningen af ord, synonym eller antonym. Man kan definere det som en semantisk orienteret ordbog over engelsk. Det importeres med følgende kommando:
from nltk.corpus import wordnet as guru
Find synonymer fra NLTK WordNet i Python
Statistik viser, at der er 155287 ord og 117659 synonymer sæt, der følger med engelsk WordNet.
Forskellige metoder tilgængelige med WordNet kan findes ved at skrive dir(guru)
['_LazyCorpusLoader__args', '_LazyCorpusLoader__kwargs', '_LazyCorpusLoader__load', '_LazyCorpusLoader__name', '_LazyCorpusLoader__reader_cls', '__class__', '__class__', '__delattr__', '__delattr__', '____q__', '__delattr__', '__delattr__', '__delattr__','__ format__', ' __ge__', '__getattr__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__' , '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', '_unload', 'subdir', 'unicode_repr']
Lad os forstå nogle af de funktioner, der er tilgængelige med wordnet:
Synset: Det kaldes også som synonymsæt eller samling af synonymord. Lad os tjekke et eksempel
from nltk.corpus import wordnet syns = wordnet.synsets("dog") print(syns)
Output:
[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')]
Leksiske relationer: Det er semantiske relationer, som er gengældt. Hvis der er en sammenhæng mellem {x1,x2,…xn} og {y1,y2,…yn}, så er der også sammenhæng mellem {y1,y2,…yn} og {x1,x2,…xn}. For eksempel er synonym det modsatte af antonym eller hypernyms og hyponym er en type leksikalsk begreb.
Lad os skrive et program vha python at finde synonym og antonym for ordet "aktiv" ved hjælp af 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))
Udgangen af koden:
{'dynamic', 'fighting', 'combat-ready', 'active_voice', 'active_agent', 'participating', 'alive', 'active'} — Synonym
{'stativ', 'passiv', 'stille', 'passiv_stemme', 'uddød', 'sovende', 'inaktiv'} — Antonym
Forklaring af koden
- Wordnet er et korpus, så det importeres fra ntlk.corpus
- Listen over både synonym og antonym tages som tom, som vil blive brugt til at tilføje
- Synonymer til ordet aktiv søges i modulet synsets og tilføjes i listen synonymer. Den samme proces gentages for den anden.
- Output udskrives
Konklusion
WordNet er en leksikalsk database, der er blevet brugt af en major søgemaskine. Fra WordNet kan information om et givent ord eller en sætning beregnes som f.eks
- synonym (ord med samme betydning)
- hypernymer (det generiske udtryk, der bruges til at betegne en klasse af detaljer (dvs. måltid er en morgenmad), hyponymer (ris er et måltid)
- holonymer (proteiner, kulhydrater er en del af måltidet)
- meronymer (måltid er en del af det daglige fødeindtag)
WordNet giver også information om koordinerede udtryk, afledninger, sanser og mere. Det bruges til at finde lighederne mellem to ord. Det indeholder også information om resultaterne af det relaterede ord. Kort eller nøddeskal man kan behandle det som ordbog eller synonymordbog. Går man dybere i wordnet, er det opdelt i fire samlede undernet som f.eks
- Navneord
- Udsagnsord
- adjektiv
- adverbium
Det kan bruges inden for kunstig intelligens til tekstanalyse. Ved hjælp af Wordnet kan du oprette dit korpus til stavekontrol, sprogoversættelse, spam-detektion og mange flere.
På samme måde kan du bruge dette korpus og forme det til at arbejde med noget dynamisk funktionalitet. Dette er ligesom klar til at lave korpus til dig. Du kan bruge det på din måde.