Countvectorize 统计大文件中的字数

Posted

技术标签:

【中文标题】Countvectorize 统计大文件中的字数【英文标题】:Countvectorize to count the number of words in a huge file 【发布时间】:2022-01-19 15:59:42 【问题描述】:

嗨,亲爱的,我有一个问题。我想对我的大型数据集中的所有单词进行计数和求和,大约 2 GB 用于 3400000 行。我写的代码是:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer

pd.set_option('display.max_colwidth', None)
df1 = pd.read_pickle("tweet_post_stop.pkl")

然后

cv = CountVectorizer()
cv_fit = cv.fit_transform(df1.Testo_token)

一切都很好,但我对分段部分有疑问:

word_list = cv.get_feature_names_out()
count_list = cv_fit.toarray().sum(axis= 0)

使用最后一个命令内核死了,我不能做我想做的事,也就是说计算数据集中出现的所有单词并将它们相加,看看人们最常用的前 20 个单词.我怎样才能改进我的代码让它做我想做的事?我认为这是 RAM 的问题,但我有 24 GB 的 RAM。我在我的数据框的一部分上尝试了这段代码。我将前 100 行保存在另一个 Dataframe 上,导入它并在我的代码上尝试了 100 行,它可以工作。为了在所有数据集上执行我想要的操作,我能做些什么? 感谢您为我花费的时间和耐心

【问题讨论】:

【参考方案1】:

我找到的唯一解决方案是减少特征数量作为 CountVectorizer 的参数,以这种方式:

vectorizer = CountVectorizer(max_features = n)

其中“n”是一个可以代表我们主要特征的数字。

【讨论】:

【参考方案2】:

CountVectorizer 会产生一个非常稀疏的矩阵(这个矩阵每行会有很多0 和很少的1)。

例如,如果您有 10000 个单词的词汇表,编码后的句子 I love *** 将产生一个大小为 (10000,) 的数组,其中包含 3 乘以 1,否则为 0。

您可以想象,这将在内存中占用大量空间。为了解决这个问题,CountVectorizer 生成了一个稀疏矩阵,前一句将仅由单词的索引位置及其计数的 3 个值表示。

当您执行cv_fit.toarray() 时,您基本上是将每个句子转换为大小为(10000,) 的numpy 数组。

因此,您应该直接在稀疏矩阵上执行此操作,如下例所示:

from sklearn.feature_extraction.text import CountVectorizer
corpus = [
    'This is the first document.',
    'This document is the second document.',
    'And this is the third one.',
    'Is this the first document?',
]

vectorizer = CountVectorizer()
X = vectorizer.fit_transform(corpus)
features = vectorizer.get_feature_names_out()
freqs = zip(vectorizer.get_feature_names_out(), np.asarray(X.sum(axis=0)).ravel())
print(sorted(freqs, key=lambda x: -x[1]))

【讨论】:

我尝试过这样做。另外,如果我不明白您在做什么,我试图知道它是否有效,但我有这个减弱:IOPub 数据速率超出。笔记本服务器将暂时停止向客户端发送输出以避免崩溃。要更改此限制,请设置配置变量 --NotebookApp.iopub_data_rate_limit。我可以做什么?比你@Antoine Dubuis 的时间 此警告发生在哪些行上? 在所有数据集上我收到了这个问题@Antoine Dubuis

以上是关于Countvectorize 统计大文件中的字数的主要内容,如果未能解决你的问题,请参考以下文章

执行计数、排序/映射大字典

040.文件的字数统计程序

MapReduce Job 如何在 HDFS 上工作?

Linux命令之统计文件字数字符数字节数及行数信息wc

微信小程序如何查看是不是超过2m

Linux 中如何查看文件的行数,字数,字节数