当前位置: 首页 > 知识库问答 >
问题:

Python集合之间的差异。计数器和nltk。可能性频差

夹谷成龙
2023-03-14

我想计算文本语料库中单词的词频。我一直在使用NLTK的word_tokenize,后跟概率。FreqDist一段时间来完成这项工作。单词_tokenize返回一个列表,该列表由FreqDist转换为频率分布。然而,我最近在collections(collections.Counter)中遇到了计数器函数,它似乎在做完全相同的事情。FreqDist和Counter都有一个最常用(n)函数,返回n个最常用的字。有人知道这两者之间有什么不同吗?一个比另一个快吗?是否存在一个可行,另一个不可行的情况?

共有1个答案

楚方伟
2023-03-14

nltk。可能性FreqDist集合的一个子类。计数器

从文档中:

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

继承是从代码中显式显示的,本质上,计数器FreqDist的初始化方式没有区别,请参阅https://github.com/nltk/nltk/blob/develop/nltk/probability.py#L106

因此,从速度上来说,创建计数器FreqDist应该是相同的。速度上的差异应该是微不足道的,但值得注意的是,管理费用可能是:

  • 在解释器中定义类时,在中编译类
  • 鸭子打字的成本__初始化()

主要的区别是FreqDist为统计/概率自然语言处理(NLP)提供的各种函数,例如查找hapax。FreqDist扩展的函数的完整列表如下:

>>> 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()时,它实际上是使用计数器中的父函数,因此检索排序的most_common列表的速度对于两种类型都是相同的。

就我个人而言,当我只想检索计数时,我会使用集合。计数器.但是当我需要做一些统计操作时,我要么使用nltk。FreqDist或者我会将计数器转储到熊猫中。DataFrame(请参阅将计数器对象转换为熊猫DataFrame)。

 类似资料:
  • 最近的Intel芯片(Ivy Bridge及以上)有生成(伪)随机位的指令<代码>RDSEED输出从芯片上传感器收集的熵生成的“真实”随机位输出由真随机数生成器播种的伪随机数生成器生成的位。根据英特尔的文档,RDSEED速度较慢,因为收集熵的成本很高。因此,RDRAND作为一种更便宜的替代方案提供,其输出对于大多数加密应用程序来说是足够安全的。(这类似于Unix系统上的开发/随机(dev/rand

  • 问题内容: 我正在计算稀疏自动编码器的算法。我已经使用和在python中实现了它。代码几乎相同,但是性能却大不相同。matlab完成任务所需的时间为0.252454秒,而numpy为0.973672151566,几乎是原来的四倍。在最小化问题中,我将在以后多次调用此代码,因此这种差异会导致实现之间的延迟几分钟。这是正常行为吗?如何提高numpy的性能? numpy实现: Sparse.rho是调整

  • 是的,这是一个老话题,但我还是有些困惑。 在爪哇,人们说: LinkedList的插入速度比ArrayList快。这里插入是什么意思?如果这意味着向后移动一些元素,然后将元素放在中间的空点,那么ArrayList应该比LinkedList慢。如果插入只意味着添加(对象)操作,这怎么会慢呢?

  • 问题内容: 我想简化我的jQuery Backbone.js Web应用程序中的内容。一种简化就是我的菜单和对话框小部件的行为。 以前,我是在开始时创建菜单的div框并使用来隐藏它们的。当我需要菜单时,我更改了样式,然后使用jQuery ui位置工具定位div框(由于无法定位具有的元素),完成后,最终将其样式更改为。 现在,我想用隐藏它们,然后在需要时使用position实用工具,然后将样式更改为

  • 我正在处理两组包含我创建的复杂java对象的数据。假设包含的元素是People.java类型的,它有一个字符串名称和一个int age。假设我有这些集: Set2=[{Arthur,18},{James,25}] 我试图得到set1和set2之间的不对称差,所以这个差的结果是{Anne,22}。我尝试过将元素存储在hashset中并使用set1。移除所有(set2),但答案等于set1。需要注意的

  • 是的,这是一个老话题,但我仍然有一些困惑。 在Java,人们说: > 如果我随机访问它的元素,ArrayList比LinkedList快。我认为随机存取意味着“给我第n个元素”。为什么ArrayList更快? LinkedList的删除速度比ArrayList快。我理解这一点。ArrayList速度较慢,因为需要重新分配内部备份阵列。代码说明: LinkedList的插入速度比ArrayList快