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

alv*_*vas 5 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')
Run Code Online (Sandbox Code Playgroud)

我还可以得到definition,pos,offset,examples因为这样的:

>>> wn.synset('dog.n.01').examples
>>> wn.synset('dog.n.01').definition
Run Code Online (Sandbox Code Playgroud)

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

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

alv*_*vas 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]
Run Code Online (Sandbox Code Playgroud)

  • 我不会依赖lemma.count(),许多条目为零,并且没有信息形式采用了频率数据。另请参阅[此相关问题](http://stackoverflow.com/questions/5928704/how-do-i-find-the-frequency-count-of-a-word-in-english-using-wordnet/12376620# 12376620) (2认同)