NLTK FreqDist,如何绘制归一化计数图?

3
在NLTK中,你可以很容易地计算一个文本中单词的出现次数。比如说,可以通过以下方式实现:
from nltk.probability import FreqDist
fd = FreqDist([word for word in text.split()])

其中text是一个字符串。现在,您可以绘制分布图如下:

fd.plot()

这将为您提供一个漂亮的折线图,显示每个单词的计数。在文档中没有提到如何绘制实际频率,而您可以在fd.freq(x)中看到。

有没有一种直接的方法来绘制标准化计数,而不需要将数据转换为其他数据结构,然后分别进行标准化和绘制?

2个回答

3
你可以使用 fd[word] / total 更新 fd[word]
from nltk.probability import FreqDist

text = "This is an example . This is test . example is for freq dist ."
fd = FreqDist([word for word in text.split()])

total = fd.N()
for word in fd:
    fd[word] /= float(total)

fd.plot()

注意:您将失去原始的FreqDist值。



0

抱歉缺乏文档说明。在nltk中,FreqDist提供了文本中单词的原始计数(即频率),而ProbDist则提供了给定文本的单词概率。

要获取更多信息,您需要阅读一些代码:https://github.com/nltk/nltk/blob/develop/nltk/probability.py

执行规范化的特定行来自https://github.com/nltk/nltk/blob/develop/nltk/probability.py#L598

因此,要获得规范化的ProbDist,可以执行以下操作:

>>> from nltk.corpus import brown
>>> from nltk.probability import FreqDist
>>> from nltk.probability import DictionaryProbDist
>>> brown_freqdist = FreqDist(brown.words())
# Cast the frequency distribution into probabilities
>>> brown_probdist = DictionaryProbDist(brown_freqdist)
# Something strange in NLTK to note though
# When asking for probabilities in a ProbDist without
# normalization, it looks it returns the count instead...
>>> brown_freqdist['said']
1943
>>> brown_probdist.prob('said')
1943
>>> brown_probdist.logprob('said')
10.924070185585345
>>> brown_probdist = DictionaryProbDist(brown_freqdist, normalize=True)
>>> brown_probdist.logprob('said')
-9.223104921442907
>>> brown_probdist.prob('said')
0.0016732805599763002

谢谢。不过很遗憾它没有plot()方法像FreqDist一样展示图表。另外,FreqDist已经有一个freq方法可以进行归一化,但这并不能解决我直接从对象绘制图表的问题。 - mar tin
在绘制概率图时,可能很难确定x轴和y轴是什么。 - alvas
不要计数,我想知道出现的频率,就这样。很有道理,我想知道语料库中一个单词的份额。我知道在语言学中,“频率”一词通常用于表示计数,但我想要比率。 - mar tin
从实际角度看,如果没有任何平滑,只进行规范化,那么你的图形是否会除了比例之外完全相同?假设我的语料库词汇是 the, hungry, eats,分别计数为 100、30、50。概率将分别为 100/180,30/180,50/180。如果你在直方图上绘制计数和概率,以词汇作为x轴,概率作为y轴,并将它们按最高概率到最低概率排序,那么你不是会得到与以单词作为x轴和计数作为y轴相同的点(只是y轴上的比例不同)吗?;P - alvas
一个重要的问题是“你在进行归一化时,参考了什么?”如果只是所有标记的总计数,那么频率与归一化概率的图形应该几乎相同。 - alvas
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接