使用 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
实际工作原理的更多信息,请参阅我的其他答案:
我正在使用 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
实际工作原理的更多信息,请参阅我的其他答案: