【问题标题】:A count given by CountVectorizer is different from manual countingCountVectorizer 给出的计数不同于手动计数
【发布时间】:2020-12-01 04:53:08
【问题描述】:

我有一个包含单词(无标点符号)的单列(“字符串”)的数据框。我需要计算某个单词(在下面的示例中,单词:“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())

【问题讨论】:

    标签: python pandas scikit-learn countvectorizer


    【解决方案1】:

    我看到这种情况发生的唯一方式是您的某些单词是大写/大写的。默认情况下,CountVectorizerlowercase=True,因此您自己的方法可能会将大写/大写单词单独计算。试试:

    df[word] = df['strings'].apply(lambda s : s.lower().split().count(word))
    

    【讨论】:

      猜你喜欢
      • 2018-08-05
      • 2017-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-23
      • 2019-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多