Scikit learn 使用TFIDF矢量器的n-gram矢量化

Scikit learn 使用TFIDF矢量器的n-gram矢量化,scikit-learn,tf-idf,Scikit Learn,Tf Idf,我正在使用TFIDFvectorier 具有以下参数: smooth_idf=False, sublinear_tf=False, norm=None, analyzer='word', ngram_range=(1,2) 我将以下文字矢量化:“红色的太阳,粉色的糖果,绿色的花朵。” 下面是get\u feature\u names()的输出: 既然“糖果”和“绿色”是单独句子的一部分,为什么创建了“糖果绿色” 有没有办法防止n-gram的创建产生多个句子 取决于如何将其传递给TfidfVec

我正在使用
TFIDFvectorier
具有以下参数:

smooth_idf=False, sublinear_tf=False, norm=None, analyzer='word', ngram_range=(1,2)
我将以下文字矢量化:“红色的太阳,粉色的糖果,绿色的花朵。”

下面是
get\u feature\u names()的输出:

既然“糖果”和“绿色”是单独句子的一部分,为什么创建了“糖果绿色”


有没有办法防止n-gram的创建产生多个句子

取决于如何将其传递给
TfidfVectorizer

如果作为单个文档传递,TfidfVectorizer将只保留包含2个或更多字母数字字符的单词。标点符号完全被忽略,并且始终被视为标记分隔符。所以你的句子变成:

['red', 'sun', 'pink', 'candy', 'green', 'flower'] 
现在从这些令牌生成NGRAM

由于TfidfVectorizer是一种文字袋技术,用于处理文档中出现的文字,因此它不会在单个文档中保留有关文字结构或顺序的任何信息。 如果你想将它们分开处理,那么你应该自己检测这些句子,并将它们作为不同的文档传递

或者,将您自己的分析器和ngram生成器传递给TfidfVectorizer

有关tfidfvectorizer实际工作方式的更多信息,请参阅我的其他答案:


明白了,谢谢。所以,如果我想继续将其作为文件输入传递,我需要提供自己的分析器。我相信矢量器中没有
语句。一本书只是一系列单词的集合。
['red', 'sun', 'pink', 'candy', 'green', 'flower']