如何将sklearn CountVectorizer与多个字符串一起使用?

时间:2016-12-12 20:17:21

标签: python numpy scikit-learn nltk

我有一个字符串列表(10,000s)。一些字符串构成多个单词。我有另一个包含一些句子的列表。我试图计算列表中每个字符串出现在每个句子中的次数。

目前我正在使用sklearn的特征提取工具,因为当我们有10,000个字符串可以查找和10,000个句子时,它的工作非常快。

以下是我的代码的简化版本。

import numpy as np
from sklearn import feature_extraction

sentences = ["hi brown cow", "red ants", "fierce fish"]

listOfStrings = ["brown cow", "ants", "fish"]

cv = feature_extraction.text.CountVectorizer(vocabulary=listOfStrings)
taggedSentences = cv.fit_transform(sentences).toarray()

taggedSentencesCutDown = taggedSentences > 0
# Here we get an array of tuples <sentenceIndex, stringIndexfromStringList>
taggedSentencesCutDown = np.column_stack(np.where(taggedSentencesCutDown))

目前,如果您运行此输出,则输出如下:

In [2]: taggedSentencesCutDown
Out[2]: array([[1, 1], [2, 2]])

我想要的是:

In [2]: taggedSentencesCutDown
Out[2]: array([[0,0], [1, 1], [2, 2]])

我目前使用的CountVectorizer表明它没有寻找多个单词字符串。有没有其他方法可以做到这一点,而不需要长期循环。效率和时间对我的应用来说非常重要,因为我的列表是10,000个。

由于

1 个答案:

答案 0 :(得分:1)

我设法通过在CountVectorizer中使用n-gram参数来解决这个问题。

如果我能够在单词列表中找到单个字符串的最大字数,我可以将其设置为我的n-gram的上限。在上面的例子中,它是“棕色牛”,有两个。

cv = feature_extraction.text.CountVectorizer(vocabulary=listOfStrings,
       ngram_range=(1, 2))