2016-07-30 130 views
4

我正在处理sklearn中的大量文本数据。首先,我需要矢量化文本上下文(字数),然后执行TfidfTransformer。我有下面的代码似乎并没有从CountVectorizer的输出到TfidfTransformer的输入。从CountVectorizer转换到Sklearn中的TfidfTransformer

TEXT = [data[i].values()[3] for i in range(len(data))] 

from sklearn.feature_extraction.text import CountVectorizer 
from sklearn.feature_extraction.text import TfidfTransformer 

vectorizer = CountVectorizer(min_df=0.01,max_df = 2.5, lowercase = False, stop_words = 'english') 

X = vectorizer(TEXT) 
transformer = TfidfTransformer(X) 
X = transformer.fit_transform() 

当我运行此代码,我得到这个错误:

Traceback (most recent call last): 
File "nlpQ2.py", line 27, in <module> 
X = vectorizer(TEXT) 
TypeError: 'CountVectorizer' object is not callable 

我以为我已经矢量文字,现在是在一个矩阵 - 有,我已经错过了转型的步骤?谢谢!!

回答

2

你可能寻找一个pipeline,或许是这样的:

pipeline = Pipeline([ 
    ('vect', CountVectorizer()), 
    ('tfidf', TfidfTransformer()), 
]) 

pipeline = make_pipeline(CountVectorizer(), TfidfTransformer()) 

在这条管道,进行常规操作(例如,fitfit_transform等向前)。

另请参阅this example

+0

谢谢。我当然需要阅读它。 – achimneyswallow

+3

不客气。你*应该*在管道上阅读,这可能是sklearn的基本思想。 –

6

此行

X = vectorizer(TEXT) 

不会产生矢量化的输出(这是一个提高例外,它无关TFIDF本身),你应该叫fit_transform。此外,你的下一个电话也是错误的。您必须将数据作为参数传递给fit_transform,而不是构造函数。

X = vectorizer.fit_transform(TEXT) 
transformer = TfidfTransformer() 
X = transformer.fit_transform(X) 
+0

谢谢。这工作。 – achimneyswallow

相关问题