如何在NLTK中获得synset的wordnet感知频率?

时间:2013-03-21 15:06:28

标签: python nlp nltk wordnet wsd

根据文档,我可以在nltk中加载有感觉标记的语料库:

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

我也可以这样获得definitionposoffsetexamples

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

但如何从语料库中获取synset的频率?要打破这个问题:

  1. 首先如何计算很多次synset是否发生了感知标记的语料库?
  2. 然后下一步是将计数除以给定特定引理的所有同义词出现的总计数。

2 个答案:

答案 0 :(得分:5)

我设法这样做了。

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]

答案 1 :(得分:0)

如果您只需要知道最常见的单词是什么,则可以执行wn.synsets(word)[0],因为WordNet通常会将它们从最频繁的单词排列到最不频繁的单词。

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