2016-07-30 23 views
4

Ich verarbeite eine große Menge an Textdaten in sklearn. Zuerst muss ich den Textkontext (Wortzählungen) vektorisieren und dann einen TfidfTransformer durchführen. Ich habe den folgenden Code, der die Ausgabe von CountVectorizer nicht an die Eingabe von TfidfTransformer zu nehmen scheint.Ein Übergang von CountVectorizer zu TfidfTransformer in sklearn

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() 

Wie ich diesen Code ausführen, erhalte ich diesen Fehler:

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

Ich dachte, ich den Text vektorisiert hatte und jetzt ist es in einer Matrix - gibt es einen Übergangsschritt, die ich verpasst habe? Vielen Dank!!

Antwort

2

Sie sind wahrscheinlich der Suche nach einem pipeline, vielleicht so etwas wie folgt aus:

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

oder

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

Auf dieser Pipeline, führen Sie die regulären Betrieb (zB fit, fit_transform, und so weiter).

Siehe auch this example.

+0

Vielen Dank. Ich muss es sicherlich lesen. – achimneyswallow

+3

Gern geschehen. Sie sollten sich aber in Pipelines umsehen - das ist vielleicht die Grundidee von sklearn. –

6

Diese Linie

X = vectorizer(TEXT) 

die Ausgabe des vectorizer nicht produzieren wird (und das ist die eine, die Ausnahme erheben, es hat nichts mit TFIDF selbst zu tun hat), sollte man fit_transform nennen. Außerdem ist Ihr nächster Anruf auch falsch. Sie müssen Daten als Argument an fit_transform übergeben, nicht an Konstruktor.

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

Danke. Das funktioniert. – achimneyswallow