CountVectorizer(analyzer ='char_wb')未按预期工作

Ben*_*Ben 5 python scikit-learn

我正在尝试使用scikit-learn CountVectorizer来计算字符2克,忽略空格.在文档它提到的参数,analyzer其中规定

该功能是否应由单词或字符n-gram组成.选项'char_wb'仅从字边界内的文本创建字符n-gram.

但是,"char_wb"似乎不像我预期的那样工作.例如:

corpus = [
    "The blue dog Blue",
    "Green the green cat",
    "The green mouse",
]

# CountVectorizer character 2-grams with word boundaries
vectorizer = CountVectorizer(analyzer='char_wb', ngram_range=(2, 2), min_df=1) 
X = vectorizer.fit_transform(corpus)
vectorizer.get_feature_names()
[' b',
 ' c',
 ' d',
 ' g',
 ' m',
 ' t',
 'at',
 'bl',
 'ca', ....
Run Code Online (Sandbox Code Playgroud)

注意像'b'这样的例子,它们包含一个空格.是什么赋予了?

joe*_*eln 8

我认为这是文档中长期存在的不准确之处,欢迎您帮忙解决.说这样更为正确:

选项'char_wb'创建字符n-gram,但不生成跨越字边界的n-gram.

这项承诺中似乎已经做出了改变,以确保; 看贡献者的评论.在比较bigrams输出时,它看起来特别尴尬analyzer='char',但当你增加到三元组时,你会看到空格可以开始或结束n-gram但不能在中间.这有助于表示特征的单词初始或单词最终性质,而无需捕获嘈杂的交叉单词字符n-gram.它还确保,与该提交之前不同,所有提取的n-gram具有相同的长度!