Как получить синонимы / антонимы из NLTK WordNet в Python?

Опубликовано: 26 Июля, 2021

WordNet - это большая лексическая база данных английского языка. Существительные, глаголы, прилагательные и наречия сгруппированы в наборы когнитивных синонимов (синсетов), каждый из которых выражает отдельное понятие. Синсеты связаны между собой понятийно-семантическими и лексическими отношениями.
Структура WordNet делает его полезным инструментом для компьютерной лингвистики и обработки естественного языка.

WordNet внешне напоминает тезаурус, поскольку он группирует слова вместе на основе их значений. Однако есть несколько важных отличий.

  • Во-первых, WordNet связывает не только словоформы - последовательности букв, но и определенные смыслы слов. В результате слова, которые находятся в непосредственной близости друг от друга в сети, семантически устраняют неоднозначность.
  • Во-вторых, WordNet маркирует семантические отношения между словами, тогда как группировка слов в тезаурусе не следует никакому явному шаблону, кроме схожести значений.




# First, you're going to need to import wordnet:
from nltk.corpus import wordnet
# Then, we're going to use the term "program" to find synsets like so:
syns = wordnet.synsets( "program" )
# An example of a synset:
print (syns[ 0 ].name())
# Just the word:
print (syns[ 0 ].lemmas()[ 0 ].name())
# Definition of that first synset:
print (syns[ 0 ].definition())
# Examples of the word in use in sentences:
print (syns[ 0 ].examples())

Результат будет выглядеть так:
plan.n.01
строить планы
ряд шагов, которые необходимо выполнить, или целей, которые необходимо достичь
['они составили план из шести шагов', 'они обсудили планы нового выпуска облигаций']

Далее, как мы можем различать синонимы и антонимы к слову? Леммы будут синонимами, а затем вы можете использовать .antonyms, чтобы найти антонимы к леммам. Таким образом, мы можем заполнить несколько списков, например:

На выходе будет два набора синонимов и антонимов.
{'благотворно', 'просто', 'прямо', 'тщательно', 'in_force', 'хорошо', 'умелый', 'умелый', 'добротный', 'неиспорченный', 'эксперт', 'опытный', ' in_effect »,« благородный »,« адепт »,« безопасный »,« товарный »,« уважаемый »,« добротный »,« правильный »,« респектабельный »,« хороший »,« серьезный »,« спелый »,« благотворный » , 'дорогой', 'практичный', 'добродетель', 'безопасный', 'эффективный', 'неиспорченный', 'надежный', 'неразложенный', 'честный', 'полный', 'почти', 'trade_good'} { "зло", "зло", "плохо", "зло", "плохо"}

А теперь сравним индекс схожести любых двух слов.




import nltk
from nltk.corpus import wordnet
# Let's compare the noun of "ship" and "boat:"
w1 = wordnet.synset( 'run.v.01' ) # v here denotes the tag verb
w2 = wordnet.synset( 'sprint.v.01' )
print (w1.wup_similarity(w2))

Выход:
0,857142857143




w1 = wordnet.synset( 'ship.n.01' )
w2 = wordnet.synset( 'boat.n.01' ) # n denotes noun
print (w1.wup_similarity(w2))

Выход:
0,9090909090909091

Эта статья предоставлена Пратимой Упадхьяй . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью с помощью provide.geeksforgeeks.org или отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.

Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Внимание компьютерщик! Укрепите свои основы с помощью базового курса программирования Python и изучите основы.

Для начала подготовьтесь к собеседованию. Расширьте свои концепции структур данных с помощью курса Python DS. А чтобы начать свое путешествие по машинному обучению, присоединяйтесь к курсу Машинное обучение - базовый уровень.