如何在NLTK中获取同义词集合的wordnet用法频率?
根据文档,我可以这样在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
但是我怎么才能从语料库中获取一个同义词集的频率呢?我们可以把这个问题分解成以下几个步骤:
- 首先,如何计算一个同义词集在带有语义标签的语料库中出现了多少次?
- 接下来,第二步是将这个计数除以所有同义词集出现的总次数,这个总次数是针对特定词元的。
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]