CountVectorizer 给出的计数不同于手动计数
A count given by CountVectorizer is different from manual counting
我有一个包含单词(无标点符号)的单列(“字符串”)的数据框。我需要计算某个词(在下面的示例中,词:“问题”)出现在此数据框中的行数。
首先,我为每个单词创建了一个列,统计了每个单词在每一行中出现的次数,并统计了“问题”为正值的行数。即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())
我看到这种情况的唯一方式是你的一些话是 uppercase/capitalized。默认情况下,CountVectorizer
是 lowercase=True
,因此您自己的方法可能将 uppercase/capitalized 单词视为单独的。尝试:
df[word] = df['strings'].apply(lambda s : s.lower().split().count(word))
我有一个包含单词(无标点符号)的单列(“字符串”)的数据框。我需要计算某个词(在下面的示例中,词:“问题”)出现在此数据框中的行数。
首先,我为每个单词创建了一个列,统计了每个单词在每一行中出现的次数,并统计了“问题”为正值的行数。即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())
我看到这种情况的唯一方式是你的一些话是 uppercase/capitalized。默认情况下,CountVectorizer
是 lowercase=True
,因此您自己的方法可能将 uppercase/capitalized 单词视为单独的。尝试:
df[word] = df['strings'].apply(lambda s : s.lower().split().count(word))