Python 如何在NLTK中获取语法集的wordnet感知频率?

Python 如何在NLTK中获取语法集的wordnet感知频率?,python,nlp,nltk,wordnet,wsd,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') 我还可以获得定义,位置,偏移量,示例: >>> wn.synset('dog.n.01').exampl

根据文档,我可以在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
但是如何从语料库中获取语法集的频率呢?来分解这个问题:

  • 首先,如何计算语义标记语料库中一个语法集出现的次数
  • 然后,下一步是将计数除以给定特定引理的所有语法集出现的计数总数

  • 我设法这样做了

    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]
    

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


    (来源:Daniel Jurafsky's Speech and Language Processing第二版)

    在文档的引理部分,它显示了一些计数,但我不确定它们是什么,我不会依赖引理。计数(),许多条目为零,并且没有获取频率数据的信息形式。另请参见关于0计数的注释。这是一种蹩脚的平滑,但我用拉普拉斯平滑了它。至少得到0.001比0好,并且破坏管道中的其他子系统=)