我正在尝试使用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', ....
注意像"b"这样包含空格的例子。什么东西?
我认为这是文档中长期存在的错误,欢迎您帮助修复。更正确的说法是:
选项"char_wb"创建字符n-gram,但不会生成跨越单词边界的n-gram。
这一改变似乎是为了确保;请参阅投稿人的评论。当将bigram输出与analyzer='char'
的输出进行比较时,这看起来特别尴尬,但当您增加到trigram时,您会看到空白可以开始或结束n-gram,但不能在在中间。这有助于表示特征的单词初始或单词最终性质,而不会捕获有噪声的跨单词字符n-gram。它还确保,与之前的提交不同,所有提取的n-gram都具有相同的长度!