如何解决CountVectorizer给出的计数与手动计数不同
我有一个包含单词(无标点符号)的单列(“字符串”)的数据框。我需要计算在此数据框中出现的某个单词(在下面的示例中,单词:“ problem”)的行数。
首先,我为每个单词创建一列,计算每个单词在每一行中出现的次数,并对“问题”带有正值的行数进行计数。那就是method1_outcome
。
然后,我使用sklearn的内置CountVectorizer对象将相同的数据帧行转换为稀疏矩阵,并计算与“问题”(method2_outcome
)相对应的列的正值。
问题是这些值不匹配。而且两者之间的差异也不小。 method2_outcome
大于11%。这里发生了什么?我查看了CountVectorizer的文档,但找不到答案。
第一种方法:
for word in some_words:
df[word] = df['strings'].apply(lambda s : s.split().count(word))
method1_outcome = np.count_nonzero(df['problem'].values)
第二种方法:
vect = CountVectorizer(vocabulary=some_words)
word_matrix = vect.fit_transform(df['strings'])
ind = vect.vocabulary_['problem']
method2_outcome = np.count_nonzero(word_matrix[:,ind].toarray())
解决方法
我看到这种情况的唯一方法是您的某些单词是大写/大写。默认情况下,CountVectorizer
是lowercase=True
,因此您自己的方法可能会将大写字母/大写单词分开计算。试试:
df[word] = df['strings'].apply(lambda s : s.lower().split().count(word))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。