Python 如何在NLTK中获取语法集的wordnet感知频率?
根据文档,我可以在nltk中加载感官标记语料库,如下所示: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
>>> 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好,并且破坏管道中的其他子系统=)