我有一个字符串列表(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个。
由于
答案 0 :(得分:1)
我设法通过在CountVectorizer中使用n-gram参数来解决这个问题。
如果我能够在单词列表中找到单个字符串的最大字数,我可以将其设置为我的n-gram的上限。在上面的例子中,它是“棕色牛”,有两个。
cv = feature_extraction.text.CountVectorizer(vocabulary=listOfStrings,
ngram_range=(1, 2))