使用 TfidfVectorizer 的 n-gram 向量化

n-gram vectorization using TfidfVectorizer

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

smooth_idf=False, sublinear_tf=False, norm=None, analyzer='word', ngram_range=(1,2)

我正在矢量化以下文本:"red sun, pink candy. Green flower."

这是get_feature_names():

的输出
['candy', 'candy green', 'coffee', 'flower', 'green', 'green flower', 'hate', 'icecream', 'like', 'moon', 'pink', 'pink candy', 'red', 'red sun', 'sun', 'sun pink']

既然“candy”和“green”是分开的句子的一部分,为什么是"candy green" n-gram 创建了吗?

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

取决于您如何将其传递给 TfidfVectorizer!

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

['red', 'sun', 'pink', 'candy', 'green', 'flower'] 

现在从这些标记中生成 ngram。

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

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

有关 TfidfVectorizer 实际工作原理的更多信息,请参阅我的其他答案: