2017-03-21 6 views
1

ich eine Textspalte in Pandas haben:Pandas + CountVectorizer: wie zum Filtern von Zeilen schnell

df['TEXT_COL'] 

dann ich CountVectorizer für sie gelten:

vectorizer = CountVectorizer() 
v = vectorizer.fit_transform(df['TEXT_COL']) 

und eine Reihe von Wörtern erhalten/Features:

ft = v.get_feature_names() 

und ein TDM:

m = vectorizer.transform(df['TEXT_COL']) 

ich brauche: Scheibe df die nur Zeilen enthält, die bestimmte Funktion aus feature_set ft enthalten.

Wie bekomme ich es?

Pandas Setup:

import pandas as pd 

data = [('Word'), ('Word Sea Ocean'), ('Tree'), ('Forest Tree')] 

df = pd.DataFrame(data) 
df.columns = ['TEXT_COL'] 

from sklearn.feature_extraction.text import CountVectorizer 

vectorizer = CountVectorizer() 
v = vectorizer.fit_transform(df['TEXT_COL']) 

ft = vectorizer.get_feature_names() 
m = vectorizer.transform(df['TEXT_COL']) 

enter image description here

für f in ft:

??? Hier

+0

kann Ihnen zeigen/Posten Sie Ihre gewünschter Datensatz? Wenn Sie nach ALLEN Features suchen, erhalten Sie fast alle Zeilen (außer denen, die NUR Stoppwörter enthalten) – MaxU

Antwort

1

ist eine kleine Demo:

# execute your setup script ... 

In [48]: vectorizer.vocabulary_ 
Out[48]: {'forest': 0, 'ocean': 1, 'sea': 2, 'tree': 3, 'word': 4} 

m ist eine spärliche Matrix

In [49]: m 
Out[49]: 
<4x5 sparse matrix of type '<class 'numpy.int64'>' 
     with 7 stored elements in Compressed Sparse Row format> 

wir es regelmäßig numpy Array umwandeln kann:

In [50]: m.toarray() 
Out[50]: 
array([[0, 0, 0, 0, 1], 
     [0, 1, 1, 0, 1], 
     [0, 0, 0, 1, 0], 
     [1, 0, 0, 1, 0]], dtype=int64) 

wie aufzulisten ein besonderes Merkmal:

In [51]: m[:, vectorizer.vocabulary_['sea']].toarray() 
Out[51]: 
array([[0], 
     [1], 
     [0], 
     [0]], dtype=int64) 

oder mit ft:

In [57]: m[:, ft.index('sea')].toarray() 
Out[57]: 
array([[0], 
     [1], 
     [0], 
     [0]], dtype=int64) 

In [52]: df 
Out[52]: 
     TEXT_COL 
0   Word 
1 Word Sea Ocean 
2   Tree 
3  Forest Tree 

Lassen Sie uns alle Zeilen zeigen enthält Feature 'tree':

In [71]: idx = m[:, ft.index('tree')] == 1 

In [72]: df[idx.toarray()] 
Out[72]: 
     TEXT_COL 
2   Tree 
3 Forest Tree 

oder einfach nur so:

In [77]: df[m[:, ft.index('tree')].astype(bool).toarray()] 
Out[77]: 
     TEXT_COL 
2   Tree 
3 Forest Tree 
+0

Funktioniert wie ein Charme! Vielen Dank. –

+0

@DenisKulagin, froh, ich könnte helfen :) – MaxU

Verwandte Themen