首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python的collections.Counter和nltk.probability.FreqDist的区别

Python的collections.Counter和nltk.probability.FreqDist的区别
EN

Stack Overflow用户
提问于 2016-01-05 03:58:26
回答 1查看 3.6K关注 0票数 6

我想计算一个文本语料库中单词的词频。为了完成这个任务,我已经使用了NLTK的word_tokenize,然后是probability.FreqDist。word_tokenize返回一个列表,该列表由FreqDist转换为频率分布。然而,我最近在集合中遇到了计数器函数(collections.Counter),它似乎在做完全相同的事情。FreqDist和计数器都有一个most_common(n)函数,它返回n个最常见的单词。有人知道这两者之间有什么区别吗?一个比另一个快吗?是否有这样的情况:一种会起作用,而另一种则不会?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-05 07:52:39

nltk.probability.FreqDistcollections.Counter的子类。

来自文档

实验结果的频率分布。频率分布记录每个实验结果发生的次数。例如,频率分布可用于记录文档中每个字类型的频率。形式上,频率分布可以定义为从每个样本到采样作为结果发生的次数的函数映射。

继承将从代码中显式显示。和本质上,在初始化CounterFreqDist方面没有区别,参见https://github.com/nltk/nltk/blob/develop/nltk/probability.py#L106

因此,就速度而言,创建CounterFreqDist应该是相同的.速度上的差异应该是微不足道的,但值得注意的是,间接费用可能是:

  • 在解释器中定义类时,类的编译。
  • 鸭型.__init__()的成本

主要区别在于FreqDist为统计/概率自然语言处理提供的各种功能,例如寻找触觉FreqDist扩展Counter的函数的完整列表如下:

代码语言:javascript
复制
>>> from collections import Counter
>>> from nltk import FreqDist
>>> x = FreqDist()
>>> y = Counter()
>>> set(dir(x)).difference(set(dir(y)))
set(['plot', 'hapaxes', '_cumulative_frequencies', 'r_Nr', 'pprint', 'N', 'unicode_repr', 'B', 'tabulate', 'pformat', 'max', 'Nr', 'freq', '__unicode__'])

当涉及到使用FreqDist.most_common()时,它实际上使用的是来自Counter的父函数,因此对于这两种类型,检索排序的most_common列表的速度是相同的。

就我个人而言,当我只想检索计数时,我使用collections.Counter。但是,当我需要做一些统计操作时,我要么使用nltk.FreqDist,要么将Counter转储到pandas.DataFrame中(参见将计数器对象转换为Pandas)。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34603922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档