我正在使用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']


由于“ candy”和“ green”是单独句子的一部分,为什么要创建“ candy green” n-gram?

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

最佳答案

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

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

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


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

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

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

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


sklearn TfidfVectorizer : Generate Custom NGrams by not removing stopword in them

关于scikit-learn - 使用TfidfVectorizer进行n语法向量化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52120580/

10-11 17:12