Python 使用Sci工具包的计数向量器转换输入,仅匹配词汇表中的精确单词
我有一个二维数组。数组的每一行都是烹饪配方,每一列都包含配方的成分。我想创建一个标准化的成分二进制矩阵。标准化的二进制矩阵将具有与配方矩阵相同的行数(对于每个配方)和每列中所有成分的二进制向量。如果配方中存在该成分,则该元素的值为1(如果不是零值) 现在,二进制矩阵的出现次数超过1。这是因为计数向量器匹配词汇表中的多个单词。 例如,假设我的词汇是Python 使用Sci工具包的计数向量器转换输入,仅匹配词汇表中的精确单词,python,scikit-learn,data-science,countvectorizer,scikits,Python,Scikit Learn,Data Science,Countvectorizer,Scikits,我有一个二维数组。数组的每一行都是烹饪配方,每一列都包含配方的成分。我想创建一个标准化的成分二进制矩阵。标准化的二进制矩阵将具有与配方矩阵相同的行数(对于每个配方)和每列中所有成分的二进制向量。如果配方中存在该成分,则该元素的值为1(如果不是零值) 现在,二进制矩阵的出现次数超过1。这是因为计数向量器匹配词汇表中的多个单词。 例如,假设我的词汇是 {'chicken': 0, 'chicken broth': 1, 'carrots': 2} 假设我要变换的向量是 ['chicken','ca
{'chicken': 0, 'chicken broth': 1, 'carrots': 2}
假设我要变换的向量是
['chicken','carrots']
二元矩阵将这样变换
[2, 0, 1]
当我想要的时候
[1,0,1]
这是因为“鸡”与“鸡”搭配,但也与“鸡汤”搭配。下面是我的代码片段。我只想匹配词汇表中某个单词的精确出现次数。是否有任何参数或任何方式,我可以用来实现这一点?我尝试了ngrams参数,但没有成功
cv = CountVectorizer(vocabulary=unique_igredients,lowercase=False)
taggedSentences = cv.fit_transform(unique_igredients)
#encode document
for i in recipes:
vector = cv.transform(i)
mylist = sum(map(numpy.array, vector.toarray()))
vectorized_matrix_m.append(mylist.tolist())
N-grams可用于将单词
chicken
从鸡汤中分离出来。N-grams(在本例中为双克)将鸡汤
(2个不同的标记)转换为单个标记鸡汤
,因此我们可以按需要的方式表示成分的计数:[1,0,1]
而不是[2,0,1]
。这里有一个答案链接。要使用Scikit learn实现n-gram,您需要将n-gram\u range
参数设置为任务所需的n-gram(双克、三克等)。对于本例,它是n_gram\u range=(2)
,需要根据成分的最大字数增加
注意:不要使用N克范围的如N克范围=(1,2)
,这仍然会导致代币鸡肉
与双克代币鸡肉肉汤
分开计算
总之,您可以如下更改代码的第一行(假设max\u word\u count
是如上所述的最大字数):
希望这个迟来的答案有帮助 问题解决了吗?
cv = CountVectorizer(vocabulary=unique_ingredients, lowercase=False, ngram_range=(max_word_count))