2014-10-14 19 views
8

मेरे पास प्रत्येक तत्व में बड़े स्ट्रिंग वाले एक-आयामी सरणी है। मैं टेक्स्ट डेटा को संख्यात्मक वैक्टर में बदलने के लिए CountVectorizer का उपयोग करने का प्रयास कर रहा हूं।CountVectorizer: विशेषताइंटर: 'numpy.ndarray' ऑब्जेक्ट में कोई विशेषता नहीं है 'निचला'

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

mealarray तत्वों में से प्रत्येक में बड़े तार शामिल हैं: हालांकि, मैं एक त्रुटि कहावत हो रही है। 5000 ऐसे नमूने हैं।

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

पूर्ण स्टैकट्रेस: ​​

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

कोई (पूर्ण स्टैक ट्रेस के बिना, यह कहना मुश्किल है कि कौन, या तो विज्ञान या नम्पी) एक स्ट्रिंग ('" FOO ".lower()' रिटर्न '" foo "के रूप में एक अम्पी सरणी का इलाज करने की कोशिश कर रहा है। । क्या आप निश्चित हैं कि 'भोजन के प्रकार' की सामग्री तार हैं, या 'countVectorizer' स्ट्रिंग की सरणी चाहता है? –

+0

@ अहमदफसीह, अभी प्रश्न के लिए पूर्ण स्टैक ट्रेस जोड़ा गया है! – ashu

उत्तर

11

mealarray के आकार की जाँच करें मैं नीचे दिए गए इस vectorize करने के लिए कोशिश कर रहा हूँ। यदि fit_transform पर तर्क स्ट्रिंग की एक सरणी है, तो यह एक-आयामी सरणी होनी चाहिए। (यानी, mealarray.shape फॉर्म (n,) का होना चाहिए।) उदाहरण के लिए, आपको mealarray में (n, 1) जैसे आकार का "कोई विशेषता नहीं" त्रुटि मिलेगी।

आप की तरह

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

मैंने इसे रैवेल के साथ करने की कोशिश की और निम्न त्रुटि मिली। विशेषता त्रुटि: 'noneType' ऑब्जेक्ट में कोई विशेषता 'निचला' नहीं है। भोजन के आकार का आकार (5000,1) है क्योंकि मैंने इसे "mealarray = np.empty ((प्लेन, 1), dtype = ऑब्जेक्ट)" – ashu

+1

ठीक से उपयोग करके बनाया है, इसलिए आप बाद में सरणी को पॉप्युलेट करते हैं। तो आपके पास 'भोजनराय' में शब्दों की वास्तविक संख्या की गिनती होनी चाहिए, सही? मान लीजिए कि यह 'nwords' है। फिर 'mealarray [: nwords] .ravel() 'to' fit_transform() 'पास करें। (हालांकि मुझे आश्चर्य है कि आप केवल '(प्लेन,)' के बजाय आकार '(प्लेन, 1)' के साथ सरणी क्यों बनाते हैं।) –

+0

नोट: मेरी पिछली टिप्पणी में, मुझे लगता है कि आप शुरुआत से 'भोजनराय' भरते हैं शब्दों वाले इंडेक्स के बीच 'कोई नहीं' वाला कोई सूचकांक नहीं। –

5

कुछ की कोशिश कर सकते अपने प्रश्न का उत्तर मिल गया। मूल रूप से, countVectorizer सरणी के बजाय तर्क के रूप में सूचियां (स्ट्रिंग सामग्री के साथ) ले रहा है। यह मेरी समस्या हल हो गई।

संबंधित मुद्दे

 संबंधित मुद्दे