【问题标题】:n-gram vectorization using TfidfVectorizer使用 TfidfVectorizer 进行 n-gram 向量化
【发布时间】:2019-02-06 18:56:06
【问题描述】:

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

【问题讨论】:

  • 我相信矢量化器中没有sentence。一本书只是一系列单词的集合。

标签: scikit-learn tf-idf


【解决方案1】:

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

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

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

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

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

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

有关 tfidfvectorizer 实际工作原理的更多信息,请参阅我的另一个答案:

【讨论】:

  • 知道了,谢谢。因此,如果我想继续将其作为文件输入传递,我将需要提供自己的分析器。
猜你喜欢
  • 2015-05-31
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2016-05-08
  • 2021-02-09
  • 2014-09-08
  • 2021-01-30
  • 2018-09-19
相关资源
最近更新 更多