向量化列表 uisng countvectorizer() & tfidfvectorizer()
Posted
技术标签:
【中文标题】向量化列表 uisng countvectorizer() & tfidfvectorizer()【英文标题】:Vectorize list of lists uisng countvectorizer() & tfidfvectorizer() 【发布时间】:2018-09-19 18:41:12 【问题描述】:所以我有以下已标记的列表列表:
tokenized_list = [['ALL', 'MY', 'CATS', 'IN', 'A', 'ROW'], ['WHEN', 'MY',
'CAT', 'SITS', 'DOWN', ',', 'SHE', 'LOOKS', 'LIKE', 'A',
'FURBY', 'TOY', '!'], ['THE', CAT', 'FROM', 'OUTER',
'SPACE'], ['SUNSHINE', 'LOVES', 'TO', 'SIT',
'LIKE', 'THIS', 'FOR', 'SOME', 'REASON', '.']]
当我尝试使用 CountVectorizer() 或 TfIdfVectorizer() 对其进行矢量化时
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
print(vectorizer.fit_transform(tokenized_list).todense())
print(vectorizer.vocabulary_)
我收到以下错误:
AttributeError: 'list' object has no attribute 'lower'
如果我将 simple list 放在 vectorizer.fit_transform() 函数中,它可以正常工作。
如何消除此错误?
【问题讨论】:
您想要展平列表。 我只是想在nlp中构建词袋模型的过程中使用count vectorizer函数。扁平化是什么意思?抱歉,刚接触这个。 读取链接的副本。 您可以使用tokenized_list = [' '.join(inner_list) for inner_list in tokenized_list]
将内部列表转换为字符串
嗨维维克!谢谢!我得到了想要的结果。
【参考方案1】:
tokenized_list
是一个列表列表。尝试迭代列表并将子列表作为参数传递,或者您可以展平列表。
例如:
tokenized_list = [['ALL', 'MY', 'CATS', 'IN', 'A', 'ROW'], ['WHEN', 'MY',
'CAT', 'SITS', 'DOWN', ',', 'SHE', 'LOOKS', 'LIKE', 'A',
'FURBY', 'TOY', '!'], ['THE', 'CAT', 'FROM', 'OUTER',
'SPACE'], ['SUNSHINE', 'LOVES', 'TO', 'SIT',
'LIKE', 'THIS', 'FOR', 'SOME', 'REASON', '.']]
from itertools import chain
tokenized_list = list(chain(*tokenized_list))
print(vectorizer.fit_transform(tokenized_list).todense())
输出:
[[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]
[0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0]
[0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
[0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0]
[0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0]
[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
【讨论】:
这会重新拟合每次迭代的数据,几乎可以肯定不是想要的。 对于您之前的回答 - 它给了我和以前一样的错误。 我需要为每个唯一值获取这个,例如在这个语料库中有 26 个唯一变量,所以我应该得到 26 个列表。仅此而已。 您有 34 个元素,因此您将获得 34 个列表 @Rakesh 谢谢我从上述解决方案中得到了我想要的。以上是关于向量化列表 uisng countvectorizer() & tfidfvectorizer()的主要内容,如果未能解决你的问题,请参考以下文章
SKLearn 朴素贝叶斯:在 tfidf 向量化后添加特征
为什么内置函数abs()不能用于Python列表,但却能正确地用于NumPy数组和pandas数列(因为它会被向量化)?