如何在NLTK中获取同义词集合的wordnet用法频率?

9 投票
2 回答
8889 浏览
提问于 2025-04-17 19:53

根据文档,我可以这样在nltk中加载一个带有语义标签的语料库:

>>> from nltk.corpus import wordnet_ic
>>> brown_ic = wordnet_ic.ic('ic-brown.dat')
>>> semcor_ic = wordnet_ic.ic('ic-semcor.dat')

我还可以获取定义词性偏移量示例,方法如下:

>>> wn.synset('dog.n.01').examples
>>> wn.synset('dog.n.01').definition

但是我怎么才能从语料库中获取一个同义词集的频率呢?我们可以把这个问题分解成以下几个步骤:

  1. 首先,如何计算一个同义词集在带有语义标签的语料库中出现了多少次?
  2. 接下来,第二步是将这个计数除以所有同义词集出现的总次数,这个总次数是针对特定词元的。

2 个回答

-1

如果你只想知道哪个词出现得最频繁,你可以用 wn.synsets(word)[0] 这个方法,因为WordNet通常会把词从最常见到最不常见进行排序。

(来源:Daniel Jurafsky的《语音与语言处理》第二版)

8

我这样做成功了。

from nltk.corpus import wordnet as wn

word = "dog"
synsets = wn.synsets(word)

sense2freq = {}
for s in synsets:
  freq = 0  
  for lemma in s.lemmas:
    freq+=lemma.count()
  sense2freq[s.offset+"-"+s.pos] = freq

for s in sense2freq:
  print s, sense2freq[s]

撰写回答