Поиск слов в Wordnet

Что такое Wordnet?

Wordnet - это большая лексическая база данных английского языка, созданная Принстоном. Входит в состав НЛТК. Существительные, глаголы, прилагательные и наречия сгруппированы в набор синсетов, то есть когнитивных синонимов. Здесь каждый набор синсетов выражает особое значение. Ниже приведены некоторые варианты использования Wordnet.

  • Его можно использовать для поиска определения слова
  • Мы можем найти синонимы и антонимы слова
  • Связи и сходства слов можно изучить с помощью Wordnet
  • Устранение неоднозначности слов, имеющих несколько значений и значений.

Как импортировать Wordnet?

Wordnet можно импортировать с помощью следующей команды -

from nltk.corpus import wordnet

Для более компактной команды используйте следующее -

from nltk.corpus import wordnet as wn

Экземпляры Synset

Синсет - это группы слов-синонимов, которые выражают одно и то же понятие. Когда вы используете Wordnet для поиска слов, вы получите список экземпляров Synset.

wordnet.synsets (слово)

Чтобы получить список Synsets, мы можем найти любое слово в Wordnet, используя wordnet.synsets(word). Например, в следующем рецепте Python мы собираемся найти Synset для «собаки» вместе с некоторыми свойствами и методами Synset -

пример

Сначала импортируйте wordnet следующим образом -

from nltk.corpus import wordnet as wn

Теперь введите слово, которое вы хотите найти в Synset -

syn = wn.synsets('dog')[0]

Здесь мы используем метод name (), чтобы получить уникальное имя для набора Synset, которое можно использовать для прямого получения Synset -

syn.name()
Output:
'dog.n.01'

Затем мы используем метод definition (), который даст нам определение слова -

syn.definition()
Output:
'a member of the genus Canis (probably descended from the common wolf) that has
been domesticated by man since prehistoric times; occurs in many breeds'

Другой метод - examples (), который даст нам примеры, относящиеся к слову -

syn.examples()
Output:
['the dog barked all night']

Полный пример реализации

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.name()
syn.definition()
syn.examples()

Получение гиперонимов

Синсеты организованы в виде дерева наследования, как структура, в которой Hypernyms представляет собой более абстрактные термины, в то время как Hyponymsпредставляет более конкретные термины. Одним из важных моментов является то, что это дерево можно проследить вплоть до корневого гиперонима. Давайте разберемся с концепцией с помощью следующего примера -

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()

Вывод

[Synset('canine.n.02'), Synset('domestic_animal.n.01')]

Здесь мы видим, что собака и домашнее животное - это гиперонимы слова «собака».

Теперь мы можем найти гипонимы слова «собака» следующим образом:

syn.hypernyms()[0].hyponyms()

Вывод

[
   Synset('bitch.n.04'),
   Synset('dog.n.01'),
   Synset('fox.n.01'),
   Synset('hyena.n.01'),
   Synset('jackal.n.01'),
   Synset('wild_dog.n.01'),
   Synset('wolf.n.01')
]

Из вышеприведенного вывода мы видим, что «собака» - это только один из многих гипонимов «домашние_животные».

Чтобы найти корень всего этого, мы можем использовать следующую команду -

syn.root_hypernyms()

Вывод

[Synset('entity.n.01')]

Из приведенного выше вывода видно, что у него только один корень.

Полный пример реализации

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
syn.hypernyms()
syn.hypernyms()[0].hyponyms()
syn.root_hypernyms()

Вывод

[Synset('entity.n.01')]

Леммы в Wordnet

В лингвистике каноническая форма или морфологическая форма слова называется леммой. Чтобы найти синоним, а также антоним слова, мы также можем искать леммы в WordNet. Посмотрим, как это сделать.

Поиск синонимов

Используя метод lemma (), мы можем найти количество синонимов Synset. Давайте применим этот метод к синсету "собака" -

пример

from nltk.corpus import wordnet as wn
syn = wn.synsets('dog')[0]
lemmas = syn.lemmas()
len(lemmas)

Вывод

3

Приведенный выше вывод показывает, что у «собаки» три леммы.

Получение названия первой леммы следующим образом -

lemmas[0].name()
Output:
'dog'

Получение названия второй леммы следующим образом -

lemmas[1].name()
Output:
'domestic_dog'

Получение названия третьей леммы следующим образом -

lemmas[2].name()
Output:
'Canis_familiaris'

Фактически, Synset представляет собой группу лемм, которые имеют одинаковое значение, в то время как лемма представляет собой отдельную словоформу.

Поиск антонимов

В WordNet некоторые леммы также имеют антонимы. Например, у слова «хороший» всего 27 синетов, из них 5 содержат леммы с антонимами. Давайте найдем антонимы (когда слово «хороший» используется как существительное, а когда слово «хороший» используется как прилагательное).

Пример 1

from nltk.corpus import wordnet as wn
   syn1 = wn.synset('good.n.02')
   antonym1 = syn1.lemmas()[0].antonyms()[0]
antonym1.name()

Вывод

'evil'
antonym1.synset().definition()

Вывод

'the quality of being morally wrong in principle or practice'

Приведенный выше пример показывает, что слово «добро», когда оно используется как существительное, имеет первый антоним «зло».

Пример 2

from nltk.corpus import wordnet as wn
   syn2 = wn.synset('good.a.01')
   antonym2 = syn2.lemmas()[0].antonyms()[0]
antonym2.name()

Вывод

'bad'
antonym2.synset().definition()

Вывод

'having undesirable or negative qualities’

Приведенный выше пример показывает, что слово «хороший», когда оно используется как прилагательное, имеет первый антоним «плохой».