我正在使用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中的几行都是零。为什么这可能?
答案 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')
它应该有用。