NLTK WordNet: Szinonimák keresése az NLTK WordNetben Python
⚡ Okos összefoglaló
A WordNet egy angol nyelvű lexikai adatbázis és NLTK korpuszolvasó, amely főneveket, igéket, mellékneveket és határozószókat csoportosít szinonímhalmazokba, lehetővé téve Python A programok szinonimákat, antonimákat, hipernimákat és szójelentéseket keresnek a természetes nyelvi feldolgozáshoz.
Mi az a Wordnet?
WordNet egy NLTK korpuszolvasó, egy angol lexikai adatbázis. Szavak jelentésének, szinonimáinak vagy antonimáinak megkereséséhez használható. Definiálható szemantikailag orientált angol szótárként. A WordNet importálása a következő paranccsal történik:
from nltk.corpus import wordnet as guru
Mivel a WordNet egy kész korpuszként érkezik, egyszer betöltve azonnal elkezdheti a szókapcsolatok lekérdezését anélkül, hogy saját maga kellene szótárat építenie.
Szinonimák keresése az NLTK WordNetben Python
A statisztikák azt mutatják, hogy vannak 155287 szó és 117659 szinonimája az angol WordNet részét képező készletek. A WordNetben elérhető különböző módszerek a következő címen találhatók: typing dir(guru), amely felsorolja a korpuszolvasó által elérhető összes betöltő attribútumot és segítő metódust.
Szinhét: Szinonimakészletnek vagy szinonimaszavak gyűjteményének is nevezik. Nézzünk egy példát.
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')]
Lexikai kapcsolatok: Ezek szemantikai relációk, amelyek kölcsönösen hatnak egymásra. Ha kapcsolat van {x1,x2,…xn} és {y1,y2,…yn} között, akkor kapcsolat van {y1,y2,…yn} és {x1,x2,…xn} között is. Például a szinonima az antonima ellentéte, míg a hipernimák és hiponimák egyfajta lexikai fogalmak.
Írjunk egy programot a segítségével Python az „aktív” szó szinonimájának és antonimájának megkeresése a WordNet segítségével.
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))
A kód kimenete:
{'dynamic', 'fighting', 'combat-ready', 'active_voice', 'active_agent', 'participating', 'alive', 'active'} -- Synonym
{'stative', 'passive', 'quiet', 'passive_voice', 'extinct', 'dormant', 'inactive'} -- Antonym
A kód magyarázata:
- A WordNet egy korpusz, ezért az nltk.corpus csomagból importáljuk.
- A szinonimák és antonimák két listáját üresnek tekintjük, ezeket fogjuk felhasználni a hozzáfűzéshez.
- Az „active” szó szinonimáit a synsets metódus keresi meg, és hozzáfűzi a szinonimák listájához. Ugyanez a folyamat gyűjti az antonimákat is.
- A kimenet így nyomtatódik ki: Python beállítja, így a duplikált bejegyzések automatikusan eltávolításra kerülnek.
A szinonimákon és antonimákon túl a WordNet hipernimákat (tágabb kifejezéseket), hiponimákat (specifikusabb kifejezéseket), holonimákat és meronimákat is kínál, így egyetlen lekérdezéssel egy szót egy teljes „is-a” hierarchiába lehet helyezni. Ezek a relációk teszik a WordNetet praktikus tezauruszzá a helyesírás-ellenőrzőkhöz, a nyelvi fordításhoz, a spamészleléshez és más szövegelemzési feladatokhoz a mesterséges intelligenciában.

