gpt4 book ai didi

python - 仅从 sklearn CountVectorizer 稀疏矩阵中过滤某些单词

转载 作者:行者123 更新时间:2023-11-28 22:37:33 25 4
gpt4 key购买 nike

我有一个 pandas 系列,里面全是文字。使用 sklearn 包中的 CountVectorizer 函数,我计算了稀疏矩阵。我也确定了最重要的词。现在我想过滤我的稀疏矩阵,只包含那些排名靠前的词。

原始数据包含超过 7000 行,包含超过 75000 个单词。因此我在这里创建了一个样本数据

from sklearn.feature_extraction.text import CountVectorizer
import pandas as pd
words = pd.Series(['This is first row of the text column',
'This is second row of the text column',
'This is third row of the text column',
'This is fourth row of the text column',
'This is fifth row of the text column'])
count_vec = CountVectorizer(stop_words='english')
sparse_matrix = count_vec.fit_transform(words)

我已经为该列中的所有单词创建了稀疏矩阵。这里只是为了打印我的稀疏矩阵,我使用 .toarray() 函数将其转换为数组。

print count_vec.get_feature_names()
print sparse_matrix.toarray()
[u'column', u'fifth', u'fourth', u'row', u'second', u'text']
[[1 0 0 1 0 1]
[1 0 0 1 1 1]
[1 0 0 1 0 1]
[1 0 1 1 0 1]
[1 1 0 1 0 1]]

现在我正在使用以下方法寻找经常出现的单词

# Get frequency count of all features
features_count = sparse_matrix.sum(axis=0).tolist()[0]
features_names = count_vec.get_feature_names()
features = pd.DataFrame(zip(features_names, features_count),
columns=['features', 'count']
).sort_values(by=['count'], ascending=False)

features count
0 column 5
3 row 5
5 text 5
1 fifth 1
2 fourth 1
4 second 1

从上面的结果我们知道出现频率最高的词是column, row & text。现在我只想为这些词过滤我的稀疏矩阵。我不将我的稀疏矩阵转换为数组然后进行过滤。因为我的原始数据出现内存错误,因为字数非常多。

我能够获得稀疏矩阵的唯一方法是使用 vocabulary 属性再次重复这些特定单词的步骤,就像这样

countvec_subset = CountVectorizer(vocabulary= ['column', 'text', 'row'])

相反,我正在寻找一个更好的解决方案,我可以直接为这些词过滤稀疏矩阵,而不是从头开始重新创建它。

最佳答案

您可以对稀疏矩阵进行切片。您需要导出用于切片的列。 sparse_matrix[:, columns]

In [56]: feature_count = sparse_matrix.sum(axis=0)

In [57]: columns = tuple(np.where(feature_count == feature_count.max())[1])

In [58]: columns
Out[58]: (0, 3, 5)

In [59]: sparse_matrix[:, columns].toarray()
Out[59]:
array([[1, 1, 1],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1],
[1, 1, 1]], dtype=int64)

In [60]: type(sparse_matrix[:, columns])
Out[60]: scipy.sparse.csr.csr_matrix

In [71]: np.array(features_names)[list(columns)]
Out[71]:
array([u'column', u'row', u'text'],
dtype='<U6')

切片子集仍然是一个scipy.sparse.csr.csr_matrix

关于python - 仅从 sklearn CountVectorizer 稀疏矩阵中过滤某些单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36454667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com