我正在使用TfidfVectorizer
以下参数:
smooth_idf=False, sublinear_tf=False, norm=None, analyzer='word', ngram_range=(1,2)
我正在矢量化下面的文字:“红太阳,粉红色糖果。绿花。”
这是get_feature_names():
的输出
['candy', 'candy green', 'coffee', 'flower', 'green', 'green flower', 'hate', 'icecream', 'like', 'moon', 'pink', 'pink candy', 'red', 'red sun', 'sun', 'sun pink']
由于“糖果”和“绿色”是单独句子的一部分,为什么“糖果绿”n-gram创建?
有没有办法防止产生n-gram产生多个句子?
取决于你如何将它传递给TfidfVectorizer
!
如果作为单个文档传递,TfidfVectorizer将仅保留包含2个或更多字母数字字符的单词。标点符号被完全忽略,并始终被视为标记分隔符。所以你的句子变成了:
['red', 'sun', 'pink', 'candy', 'green', 'flower']
现在从这些令牌中生成ngrams。
由于TfidfVectorizer是一种词汇技术,处理出现在文档中的单词,因此它不会保留有关单个文档中单词的结构或顺序的任何信息。如果您希望单独处理它们,那么您应该自己检测句子并将它们作为不同的文档传递。
或者,将您自己的分析器和ngram生成器传递给TfidfVectorizer。
有关tfidfvectorizer实际工作原理的更多信息,请参阅我的其他答案: