当前位置:  开发笔记 > 编程语言 > 正文

Python的集合之间的区别.Counter和nltk.probability.FreqDist

如何解决《Python的集合之间的区别.Counter和nltk.probability.FreqDist》经验,为你挑选了1个好方法。

我想计算文本语料库中单词的术语 - 频率.我一直在使用NLTK的word_tokenize,然后是probability.FreqDist一段时间才能完成.word_tokenize返回一个列表,该列表由FreqDist转换为频率分布.但是,我最近在集合(collections.Counter)中遇到了Counter函数,它似乎做了完全相同的事情.FreqDist和Counter都有一个most_common(n)函数,它返回n个最常用的单词.有谁知道这两者之间是否存在差异?一个比另一个快吗?是否存在可以工作而另一个不工作的情况?



1> alvas..:

nltk.probability.FreqDist是.的子类collections.Counter.

来自文档:

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

继承是从代码中明确显示的,基本上,a Counter和a FreqDist的初始化没有区别,请参阅https://github.com/nltk/nltk/blob/develop/nltk/probability.py#L106

所以速度快,创造一个Counter并且FreqDist应该是一样的.速度的差异应该是微不足道的,但值得注意的是,开销可能是:

在解释器中定义类时的类的编译

鸭子打字的成本 .__init__()

主要区别在于FreqDist提供统计/概率自然语言处理(NLP)的各种功能,例如查找hapaxes.FreqDist扩展的完整功能列表Counter如下:

>>> 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将其转储Counterpandas.DataFrame(请参阅将计数器对象转换为Pandas DataFrame).

推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有