2016-07-30 135 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