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