2015-12-21 96 views
2

我遇到了一个问题,我必须将其他功能(平均字长)添加到由Scikit学习的CountVectorizer函数创建的令牌计数列表中。假设我有以下代码:向CountVectorizer矩阵添加其他功能

#list of tweets 
texts = [(list of tweets)] 

#list of average word length of every tweet 
average_lengths = word_length(tweets) 

#tokenizer 
count_vect = CountVectorizer(analyzer = 'word', ngram_range = (1,1)) 
x_counts = count_vect.fit_transform(texts) 

对于每个实例,格式应为(令牌,平均字长)。我最初的想法是简单地使用压缩功能这样串联的两个列表:

x = zip(x_counts, average_lengths) 

但后来我得到一个错误,当我尝试适合我的模型:

ValueError: setting an array element with a sequence. 

任何人有任何想法如何解决这个问题呢?

回答

0

因为CountVectorizer返回一个稀疏矩阵,所以需要对它执行稀疏矩阵运算。您可以使用从scipy.sparse

例如(从SciPy的文档拍摄):

from scipy.sparse import coo_matrix, hstack 
A = coo_matrix([[1, 2], [3, 4]]) 
B = coo_matrix([[5], [6]]) 
hstack([A,B]).toarray() 
array([[1, 2, 5], 
    [3, 4, 6]]) 
1

您可以编写自己的变压器像this文章,给你每鸣叫的平均字长,并使用FeatureUnion

vectorizer = FeatureUnion([ 
     ('cv', CountVectorizer(analyzer = 'word', ngram_range = (1,1))), 
     ('av_len', AverageLenVectizer(...)) 
    ])