我对CountVectorizer和CharNGramAnalyzer有些困惑。根据我的理解,
- CountVectorizer构建一个计数矩阵,其中行是不同单词的出现次数,考虑到了高维稀疏性。
- CharNGramAnalyzer构建一个计数矩阵,其中行是不同字符的出现次数。由于它不考虑单词,因此不需要知道单词之间的分隔,适用于英语以外的其他语言。
我的理解正确吗?如果不对,我希望得到详细的解释或任何相关的资料来源。
回答:
首先,检查你的sklearn版本。我觉得你使用的是旧版本的sklearn。你对CountVectorizer
的解释是不正确的。至少在当前版本中,它不计算语料库中不同单词的数量。
根据CountVectorizer的文档,你需要传递analyzer='word'
来进行单词计数。在最新的sklearn版本中,CharNGramAnalyzer
已被弃用,并与CountVectorizer
合并。只需使用analyzer='char'
即可复制CharNGramAnalyzer
的功能。要验证这一点,请查看http://scikit-learn.org/stable/modules/classes.html#module-sklearn.feature_extraction.text,其中没有CharNGramAnalyzer
的条目