在WordNet中查找单词



什么是WordNet?

WordNet是一个大型的英语词汇数据库,由普林斯顿大学创建。它是NLTK语料库的一部分。名词、动词、形容词和副词都被分组到同义词集(synsets)中,即认知同义词。每个同义词集表达一个不同的含义。以下是WordNet的一些用例:

  • 它可以用来查找单词的定义
  • 我们可以找到一个单词的同义词和反义词
  • 可以使用WordNet探索单词关系和相似性
  • 对于具有多种用法和定义的单词进行词义消歧

如何导入WordNet?

可以使用以下命令导入WordNet:

from nltk.corpus import wordnet

对于更简洁的命令,请使用以下命令:

from nltk.corpus import wordnet as wn

Synset实例

Synset是表达相同概念的同义词的组合。当您使用WordNet查找单词时,您将获得一个Synset实例列表。

wordnet.synsets(word)

为了获得Synsets列表,我们可以使用wordnet.synsets(word)在WordNet中查找任何单词。例如,在接下来的Python示例中,我们将查找“dog”的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)

Synsets在一个继承树状结构中组织,其中上位词(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')]

在这里,我们可以看到canine和domestic_animal是“dog”的上位词。

现在,我们可以找到“dog”的下位词,如下所示:

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')
]

从上面的输出中,我们可以看到“dog”只是“domestic_animals”的众多下位词之一。

为了找到所有这些的根,我们可以使用以下命令:

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中的词元(Lemmas)

在语言学中,单词的规范形式或形态形式称为词元。为了找到单词的同义词和反义词,我们也可以在WordNet中查找词元。让我们看看怎么做。

查找同义词

通过使用lemma()方法,我们可以找到Synset的同义词数量。让我们将此方法应用于“dog” synset:

示例

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

输出

3

上面的输出显示“dog”有三个词元。

获取第一个词元的名称,如下所示:

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

获取第二个词元的名称,如下所示:

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

获取第三个词元的名称,如下所示:

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

实际上,一个Synset代表一组具有相似含义的词元,而一个词元代表一个不同的词形。

查找反义词

在WordNet中,一些词元也具有反义词。例如,“good”这个词共有27个synsets,其中5个具有带有反义词的词元。让我们找到反义词(当“good”用作名词时,以及当“good”用作形容词时)。

示例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'

上面的示例显示,当“good”用作名词时,第一个反义词是“evil”。

示例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’

上面的示例显示,当“good”用作形容词时,第一个反义词是“bad”。

广告