CountVectorizer: AttributeError: 'numpy.ndarray' objet n'a pas d'attribut "inférieure"
J'ai un tableau à une dimension avec de grandes chaînes de chacun des éléments. Je suis en train d'utiliser un CountVectorizer
pour convertir des données de texte dans des vecteurs. Cependant, je reçois un message d'erreur indiquant:
AttributeError: 'numpy.ndarray' object has no attribute 'lower'
mealarray
contient de grandes chaînes de chacun des éléments. Il y a 5000 de tels échantillons. Je suis en train de vectoriser ce comme indiqué ci-dessous:
vectorizer = CountVectorizer(
stop_words='english',
ngram_range=(1, 1), #ngram_range=(1, 1) is the default
dtype='double',
)
data = vectorizer.fit_transform(mealarray)
La pleine 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'
Quelqu'un (sans avoir la totalité de la trace de pile, il est difficile de dire qui, scikit ou Numpy) est d'essayer de traiter un tableau Numpy comme une chaîne de caractères (
juste ajouté plein de trace de pile à la question !
"FOO".lower()
retourne "foo"
). Êtes-vous sûr mealarray
'contenu sont des chaînes de caractères, ou que CountVectorizer
veut un tableau de chaînes de caractères?juste ajouté plein de trace de pile à la question !
OriginalL'auteur ashu | 2014-10-14
Vous devez vous connecter pour publier un commentaire.
Vérifier la forme de la
mealarray
. Si l'argument defit_transform
est un tableau de chaînes de caractères, il doit être un tableau à une dimension. (Qui est,mealarray.shape
doit être de la forme(n,)
.) Par exemple, vous obtiendrez le "pas d'attribut" erreur simealarray
a une forme telle que(n, 1)
.Vous pouvez essayer quelque chose comme
OK, si vous puis de remplir le tableau par la suite. Ensuite, vous devez avoir un décompte du nombre de mots dans
mealarray
, correct? Disons que c'estnwords
. Puis passermealarray[:nwords].ravel()
àfit_transform()
. (Bien que je me demande pourquoi vous créez la matrice de la forme de la(plen,1)
au lieu de simplement(plen,)
.)Remarque: Dans mon commentaire précédent, je suppose que vous remplissez
mealarray
depuis le début, sans indices contenantNone
entre les indices contenant des mots.eu le même problème, votre
ravel()
solution a fonctionné pour moi. Merci!OriginalL'auteur Warren Weckesser
Eu la réponse à ma question.
Fondamentalement, CountVectorizer est de prendre listes (avec chaîne de contenu) comme un argument plutôt que de tableau. Qui a résolu mon problème.
OriginalL'auteur ashu
Une meilleure solution est appel explicite pandas de la série et passer CountVectorizer():
Suivant ne fonctionne pas, à cause de ses une image et NON de la série
OriginalL'auteur Max Kleiner