2014-10-14 8 views
8

Ho una matrice unidimensionale con stringhe grandi in ciascuno degli elementi. Sto cercando di utilizzare un CountVectorizer per convertire i dati di testo in vettori numerici. Tuttavia, io sono sempre un detto errore:CountVectorizer: AttributeError: l'oggetto 'numpy.ndarray' non ha attributo 'lower'

AttributeError: 'numpy.ndarray' object has no attribute 'lower' 

mealarray contiene stringhe di grandi dimensioni in ciascuno degli elementi. Ci sono 5000 tali campioni. Sto cercando di vettorizzare questo come indicato di seguito:

vectorizer = CountVectorizer(
    stop_words='english', 
    ngram_range=(1, 1), #ngram_range=(1, 1) is the default 
    dtype='double', 
) 
data = vectorizer.fit_transform(mealarray) 

La piena stacktrace:

File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/text.py", line 817, in fit_transform 
    self.fixed_vocabulary_) 
    File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/text.py", line 748, in _count_vocab 
    for feature in analyze(doc): 
    File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/text.py", line 234, in <lambda> 
    tokenize(preprocess(self.decode(doc))), stop_words) 
    File "/Library/Python/2.7/site-packages/sklearn/feature_extraction/text.py", line 200, in <lambda> 
    return lambda x: strip_accents(x.lower()) 
AttributeError: 'numpy.ndarray' object has no attribute 'lower' 
+1

Qualcuno (senza avere la traccia completa dello stack, è difficile dire chi, scikit o Numpy) sta tentando di trattare un array Numpy come una stringa ('" FOO ".lower()' restituisce '" foo "') . Sei sicuro che i contenuti di 'mealarray' sono stringhe, o che' CountVectorizer' vuole una serie di stringhe? –

+0

@AhmedFasih, ha appena aggiunto la traccia dello stack completo alla domanda! – ashu

risposta

11

controllare la forma di mealarray. Se l'argomento su fit_transform è una matrice di stringhe, deve essere una matrice unidimensionale. (Vale a dire, mealarray.shape deve essere nel formato (n,).) Ad esempio, si otterrà l'errore "nessun attributo" se mealarray ha una forma come (n, 1).

Si potrebbe provare qualcosa di simile

data = vectorizer.fit_transform(mealarray.ravel()) 
+0

L'ho provato con Ravel e ho ottenuto il seguente errore. AttributeError: l'oggetto 'NoneType' non ha attributo 'lower'. La forma di mealarray è (5000,1) perché l'ho creata usando "mealarray = np.empty ((plen, 1), dtype = object)" – ashu

+1

OK, quindi in seguito compila l'array. Quindi è necessario avere un conteggio del numero effettivo di parole in 'mealarray', corretto? Diciamo che è 'nwords'. Quindi passa 'mealarray [: nwords] .ravel()' a 'fit_transform()'. (Anche se mi chiedo perché crei l'array con shape '(plen, 1)' invece di solo '(plen,)'.) –

+0

Nota: nel mio precedente commento, presumo che tu riempia 'mealarray' dall'inizio, con nessun indice contenente 'Nessuno' tra indici contenenti parole. –

5

avuto la risposta alla mia domanda. Fondamentalmente, CountVectorizer sta prendendo liste (con contenuto di stringhe) come argomento piuttosto che come array. Questo ha risolto il mio problema.

Problemi correlati