NLTK WordNet: Znajdź synonimy z NLTK WordNet w Python
Co to jest Wordnet?
Wordnet to czytnik korpusu NLTK, baza danych leksykalnych dla języka angielskiego. Może być używany do znajdowania znaczenia słów, synonimów lub antonimów. Można go zdefiniować jako semantycznie zorientowany słownik języka angielskiego. Importuje się go za pomocą następującego polecenia:
from nltk.corpus import wordnet as guru
Znajdź synonimy z NLTK WordNet w Python
Statystyki pokazują, że są 155287 słów i 117659 synonimów zestawy zawarte w angielskim WordNet.
Różne metody dostępne w WordNet można znaleźć, wpisując 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__”, „__reduce__” , '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', '__weakref__', '_unload', 'podkatalog', 'unicode_repr']
Przyjrzyjmy się niektórym funkcjom dostępnym w wordnecie:
Synset: Nazywa się go także zestawem synonimów lub zbiorem słów synonimicznych. Sprawdźmy na przykładzie
from nltk.corpus import wordnet syns = wordnet.synsets("dog") print(syns)
Wyjście:
[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')]
Stosunki leksykalne: Są to relacje semantyczne, które są odwzajemnione. Jeśli istnieje związek pomiędzy {x1,x2,…xn} i {y1,y2,…yn}, to istnieje także związek pomiędzy {y1,y2,…yn} i {x1,x2,…xn}. Na przykład synonim jest przeciwieństwem antonimów lub hipernimów, a hiponimy są rodzajem koncepcji leksykalnej.
Napiszemy program wykorzystujący pyton znaleźć synonim i antonim słowa „aktywny” za pomocą Wordnetu.
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))
Wynik kodu:
{'dynamiczny', 'walczący', 'gotowy do walki', 'active_voice', 'active_agent', 'partycypujący', 'żywy', 'aktywny'} — synonim
{'statyczny', 'pasywny', 'cichy', 'pasywny_głos', 'wymarły', 'uśpiony', 'nieaktywny'} — Antonim
Wyjaśnienie kodu
- Wordnet jest korpusem, więc jest importowany z korpusu ntlk
- Lista synonimów i antonimów jest traktowana jako pusta i będzie używana do dopisywania
- Synonimy słowa aktywny wyszukiwane są w synsetach modułu i dołączane do listy synonimów. Ten sam proces powtarza się w przypadku drugiego.
- Dane wyjściowe zostaną wydrukowane
Podsumowanie
WordNet to leksykalna baza danych, z której korzystał major Wyszukiwarka. Z sieci WordNet można wyliczyć informacje o danym słowie lub wyrażeniu np
- synonim (wyrazy mające to samo znaczenie)
- hipernimy (ogólny termin używany do określenia klasy specyfików (tj. posiłek to śniadanie), hiponimy (ryż to posiłek)
- holonimy (białka, węglowodany wchodzą w skład posiłku)
- meronimy (posiłek jest częścią dziennego spożycia)
WordNet dostarcza również informacji na temat terminów współrzędnych, pochodnych, znaczeń i nie tylko. Służy do wyszukiwania podobieństw między dowolnymi dwoma słowami. Zawiera również informacje o wynikach powiązanego słowa. Krótko mówiąc, można go traktować jako słownik lub tezaurus. Wchodząc głębiej w wordnet, jest on podzielony na cztery podsieci, takie jak
- Rzeczownik
- Czasownik
- Przymiotnik
- Przysłówek
Można go zastosować w obszarze sztucznej inteligencji do analizy tekstu. Za pomocą Wordnetu możesz stworzyć korpus do sprawdzania pisowni, tłumaczenia języków, wykrywania spamu i wielu innych.
W ten sam sposób możesz użyć tego korpusu i uformować go tak, aby działał z dynamiczną funkcjonalnością. To jest tak, jakby gotowy korpus był dla Ciebie gotowy. Możesz to wykorzystać na swój sposób.