我在将sklearn CountVectorizer用于由单词"one"组成的文档中遇到了问题。我已经计算出当文档仅包含POS标签CD(基数)的单词时会发生错误。以下文档都会导致空词汇错误:["一"、"二"]["百"]
ngram_code=1
cv = CountVectorizer(stop_words='english', analyzer='word', lowercase=True,
token_pattern="[w']+", ngram_range=(ngram_code, ngram_code))
cv_array = cv.fit_transform(['one', 'two'])
获取错误:值错误:空词汇表;也许文件只包含停用词
以下内容不会导致错误,因为(我认为)基数单词与其他单词混合在一起:["一"、"二"、"人"]
有趣的是,在这种情况下,词汇表中只添加了"人",没有添加"一","二":
cv_array = cv.fit_transform(['one', 'two', 'people'])
cv.vocabulary_
Out[143]: {'people': 0}
作为单个单词文档的另一个示例,['hello'] 工作得很好,因为它不是基数:
cv_array = cv.fit_transform(['hello'])
cv.vocabulary_
Out[147]: {'hello': 0}
由于像"一","二"这样的词不是停止词,我希望它们由CountVectorizer处理。我该如何使用这些词?
另外:对于"系统"一词,我也遇到了同样的错误。为什么这个词会出错?
cv_array = cv.fit_transform(['system'])
ValueError:空词汇表;也许文档只包含停用词
他们之所以得到一个空的词汇表,是因为这些词属于sklearn使用的停用词列表。您可以在此处查看列表或使用以下方法进行测试:
>>> from sklearn.feature_extraction.text import ENGLISH_STOP_WORDS
>>> 'one' in ENGLISH_STOP_WORDS
True
>>> 'two' in ENGLISH_STOP_WORDS
True
>>> 'system' in ENGLISH_STOP_WORDS
True
如果你想处理这些单词,只需像这样初始化你的CountVectorizer:
cv = CountVectorizer(stop_words=None, ...