2017-12-08 20 views
1

machte ich einen Vorlaufteil für Textanalyse und nach Stoppwörter und ergeben wie diesegelten CountVectorizer auf Spalte mit der Liste von Wörtern in Reihen in Python

test[col]=test[col].apply(lambda x: [ps.stem(item) for item in re.findall(r"[\w']+", x) if ps.stem(item) not in stop_words]) 
train[col]=train[col].apply(lambda x: [ps.stem(item) for item in re.findall(r"[\w']+", x) if ps.stem(item) not in stop_words]) 

Entfernen ich eine Spalte mit der Liste „gereinigt Worte haben ". Hier sind 3 Zeilen in einer Spalte

['size'] 
['pcs', 'new', 'x', 'kraft', 'bubble', 'mailers', 'lined', 'bubble', 'wrap', 'protection', 'self', 'sealing', 'peelandseal', 'adhesive', 'keeps', 'contents', 'secure', 'tamper', 'proof', 'durable', 'lightweight', 'kraft', 'material', 'helps', 'save', 'postage', 'approved', 'ups', 'fedex', 'usps'] 
['brand', 'new', 'coach', 'bag', 'bought', 'rm', 'coach', 'outlet'] 

Ich wollte CountVectorizer an die Säule

from sklearn.feature_extraction.text import CountVectorizer 
cv=CountVectorizer(max_features=1500, analyzer='word' , lowercase=False) #will leave only 1500 words 
X_train = cv.fit_transform(train[col]) 

anwenden, aber ich habe einen Fehler

TypeError: expected string or bytes-like object 

Es ist ein bisschen seltsam wäre Zeichenfolge zu erstellen aus der Liste und dann wieder durch CountVectorizer getrennt.

Vielen Dank im Voraus.

Antwort

0

Wenn Sie fit_transform verwenden, müssen die übergebenen Parameter ein iterable von Strings oder bytesähnlichen Objekten sein. Sieht so aus, als ob du das stattdessen auf deine Spalte anwenden solltest.

X_train = train[col].apply(lambda x: cv.fit_transform(x)) 

Sie können für fit_transformhere die Dokumentation lesen.

+0

leider erzeugt einen Fehler „Valueerror zu erhalten begonnen : leeres Vokabular, vielleicht enthalten die Dokumente nur Stoppwörter " – Yury

+0

Ist es möglich, dass einige Ihrer Zeilen leere" gereinigte Wörter "haben? – Justin

+0

Erhalten Sie nicht einfach die Zeile mit allen 0 für diesen Fall? – Yury

0

Da ich keinen anderen Weg gefunden, einen Fehler zu vermeiden, trat ich in die Listen in Spalte

train[col]=train[col].apply(lambda x: " ".join(x)) 
test[col]=test[col].apply(lambda x: " ".join(x)) 

Erst danach habe ich das Ergebnis

X_train = cv.fit_transform(train[col]) 
X_train=pd.DataFrame(X_train.toarray(), columns=cv.get_feature_names()) 
Verwandte Themen