【问题标题】:Can I control the way the CountVectorizer vectorizes the corpus in scikit learn?我可以控制 CountVectorizer 在 scikit learn 中对语料库进行矢量化的方式吗?
【发布时间】:2014-07-23 08:30:49
【问题描述】:

我正在使用来自 scikit learn 的 CountVectorizer,并且我可能正在尝试做一些该对象不是为了...但我不确定的事情。

在获取发生次数方面:

vocabulary = ['hi', 'bye', 'run away!']
corpus = ['run away!']
cv = CountVectorizer(vocabulary=vocabulary)
X = cv.fit_transform(corpus)
print X.toarray()

给出:

[[0 0 0 0]]

我意识到 CountVectorizer 会将语料库分解成我认为是 unigrams 的内容:

vocabulary = ['hi', 'bye', 'run']
corpus = ['run away!']
cv = CountVectorizer(vocabulary=vocabulary)
X = cv.fit_transform(corpus)
print X.toarray()

给出:

[[0 0 1]]

有什么方法可以准确地告诉 CountVectorizer 您希望如何对语料库进行矢量化?理想情况下,我希望得到与第一个示例类似的结果。

不过,老实说,我想知道是否有可能得到这样的结果:

vocabulary = ['hi', 'bye', 'run away!']
corpus = ['I want to run away!']
cv = CountVectorizer(vocabulary=vocabulary)
X = cv.fit_transform(corpus)
print X.toarray()

[[0 0 1]]

我在 fit_transform 方法的文档中没有看到太多信息,它只接受一个参数。如果有人有任何想法,我将不胜感激。谢谢!

【问题讨论】:

  • 你想要的是CountVectorizertokenizer 参数,它应该是一个可调用的,它接受一个字符串并返回一个令牌列表。但是,从您的帖子中不清楚您想使用什么规则来标记输入。

标签: python nlp scikit-learn text-parsing corpus


【解决方案1】:

你想要的参数叫做ngram_range。您将元组 (1,2) 传递给构造函数以获取一元组和二元组。但是,您传入的词汇表必须是 dict,其中 ngrams 作为键,整数作为值。

In [20]: print CountVectorizer(vocabulary={'hi': 0, u'bye': 1, u'run away': 2}, ngram_range=(1,2)).fit_transform(['I want to run away!']).A
[[0 0 1]]

请注意,默认标记器会删除末尾的感叹号,因此最后一个标记是away。如果您想更好地控制字符串如何分解为标记,请关注@BrenBarn 的评论。

【讨论】:

  • 词汇表是“映射(例如,字典),其中键是术语,值是特征矩阵中的索引,或可迭代的术语。”(来自文档)
猜你喜欢
  • 2015-02-13
  • 2020-05-05
  • 2015-02-24
  • 2017-02-24
  • 2015-03-02
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
相关资源
最近更新 更多