在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”。

廣告