sklearn CountVectorizer输出一个空行的矩阵

时间:2015-08-03 18:04:35

标签: python numpy scikit-learn

我正在使用CountVectorizer为每个文档生成矢量。就我而言,文档是由1-5个单词组成的简短文本。

for i, doc in enumerate(documents):
    if doc: # make sure there is no empty document.
        corpus.append(doc)

countVectorizer = CountVectorizer()
weight_arr = countVectorizer.fit_transform(corpus)

for doc_index, count_vector in enumerate(weight_arr):
    nonzero_feature_indice = count_vector.nonzero()[1] # [1]: unique column index
    if nonzero_feature_indice.size == 0:
        print "EMPTY ROW!"

我使用CountVectorizer的默认参数。我不删除停用词并设置任何可能生成空文档的阈值。

{'binary': False, 'lowercase': True, 'stop_words': None, 'decode_error': u'strict', 'vocabulary': None, 'tokenizer': None, 'encoding': u'utf-8', 'dtype': <type 'numpy.int64'>, 'analyzer': u'word', 'ngram_range': (1, 1), 'max_df': 1.0, 'min_df': 1, 'max_features': None, 'input': u'content', 'strip_accents': None, 'token_pattern': u'(?u)\\b\\w\\w+\\b', 'preprocessor': None}

我发现weight_arr中的几行都是零。为什么这可能?

1 个答案:

答案 0 :(得分:2)

使用您的设置,仅使用单字母单词的文档将提供全零数组。 您的tokenizer正在过滤掉一个字母的单词。

您没有指定任何内容,但默认使用以下标记模式:

'token_pattern': u'(?u)\\b\\w\\w+\\b'

如果您想允许使用单字母单词,可以将其更改为:

'token_pattern': u'(?u)\\b\\w+\\b'

您只需将其传递给构造函数:

countVectorizer = CountVectorizer(token_pattern=u'(?u)\\b\\w+\\b')

它应该有用。