向量化列表 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()的主要内容,如果未能解决你的问题,请参考以下文章

为啥 python 不能矢量化 map() 或列表推导

PG 向量化引擎--1

SKLearn 朴素贝叶斯:在 tfidf 向量化后添加特征

为什么内置函数abs()不能用于Python列表,但却能正确地用于NumPy数组和pandas数列(因为它会被向量化)?

向量化涉及短裤的条件

我应该如何使用 scikit learn 对以下列表列表进行矢量化?