Wie

2017-10-12 3 views
1

Vokabular von Pipeline extrahieren kann ich durch die folgende Art und Weise Vokabular von CountVecotizerModel extrahierenWie

fl = StopWordsRemover(inputCol="words", outputCol="filtered") 
df = fl.transform(df) 
cv = CountVectorizer(inputCol="filtered", outputCol="rawFeatures") 
model = cv.fit(df) 

print(model.vocabulary) 

die obige Codeliste des Vokabulars mit Index gedruckt werden, wie es ids ist.

nun wie folgt eine Pipeline von dem obigen Code erstellt habe ich:

rm_stop_words = StopWordsRemover(inputCol="words", outputCol="filtered") 
count_freq = CountVectorizer(inputCol=rm_stop_words.getOutputCol(), outputCol="rawFeatures") 

pipeline = Pipeline(stages=[rm_stop_words, count_freq]) 
model = pipeline.fit(dfm) 
df = model.transform(dfm) 

print(model.vocabulary) # This won't work as it's not CountVectorizerModel 

es wird

print(len(model.vocabulary)) 

AttributeError: 'PipelineModel' object has no attribute 'vocabulary'

So werden folgende Fehler werfen, wie das Modell Attribut aus der Pipeline zu extrahieren?

Antwort

1

Auf die gleiche Weise, wie bei jeder anderen Stufe Attribut, extrahieren stages:

stages = model.stages 

das finden (-s) Sie interessiert sind:

from pyspark.ml.feature import CountVectorizerModel 

vectorizers = [s for s in stages if isinstance(s, CountVectorizerModel)] 

und gewünschten Felder erhalten:

[v.vocabulary for v in vectorizers]