मैं पाइथन और स्टैक ओवरफ्लो (कृपया नम्र रहें) में नया हूं और भावनात्मक विश्लेषण कैसे करना है, सीखने की कोशिश कर रहा हूं। मुझे लगता है मैं एक ट्यूटोरियल और यहाँ में पाया कोड के संयोजन का उपयोग कर रहा हूँ: Python - AttributeError: 'list' object has no attribute हालांकि, मैंपायथन टेक्स्ट प्रोसेसिंग: विशेषताइंटर: 'सूची' ऑब्जेक्ट में कोई विशेषता नहीं है 'निचला'
Traceback (most recent call last):
File "C:/Python27/training", line 111, in <module>
processedTestTweet = processTweet(row)
File "C:/Python27/training", line 19, in processTweet
tweet = tweet.lower()
AttributeError: 'list' object has no attribute 'lower'`
बार आ रही है यह मेरा कोड है:
import csv
#import regex
import re
import pprint
import nltk.classify
#start replaceTwoOrMore
def replaceTwoOrMore(s):
#look for 2 or more repetitions of character
pattern = re.compile(r"(.)\1{1,}", re.DOTALL)
return pattern.sub(r"\1\1", s)
# process the tweets
def processTweet(tweet):
#Convert to lower case
tweet = tweet.lower()
#Convert www.* or https?://* to URL
tweet = re.sub('((www\.[\s]+)|(https?://[^\s]+))','URL',tweet)
#Convert @username to AT_USER
tweet = re.sub('@[^\s]+','AT_USER',tweet)
#Remove additional white spaces
tweet = re.sub('[\s]+', ' ', tweet)
#Replace #word with word
tweet = re.sub(r'#([^\s]+)', r'\1', tweet)
#trim
tweet = tweet.strip('\'"')
return tweet
#start getStopWordList
def getStopWordList(stopWordListFileName):
#read the stopwords file and build a list
stopWords = []
stopWords.append('AT_USER')
stopWords.append('URL')
fp = open(stopWordListFileName, 'r')
line = fp.readline()
while line:
word = line.strip()
stopWords.append(word)
line = fp.readline()
fp.close()
return stopWords
def getFeatureVector(tweet, stopWords):
featureVector = []
words = tweet.split()
for w in words:
#replace two or more with two occurrences
w = replaceTwoOrMore(w)
#strip punctuation
w = w.strip('\'"?,.')
#check if it consists of only words
val = re.search(r"^[a-zA-Z][a-zA-Z0-9]*[a-zA-Z]+[a-zA-Z0-9]*$", w)
#ignore if it is a stopWord
if(w in stopWords or val is None):
continue
else:
featureVector.append(w.lower())
return featureVector
def extract_features(tweet):
tweet_words = set(tweet)
features = {}
for word in featureList:
features['contains(%s)' % word] = (word in tweet_words)
return features
#Read the tweets one by one and process it
inpTweets = csv.reader(open('C:/GsTraining.csv', 'rb'),
delimiter=',',
quotechar='|')
stopWords = getStopWordList('C:/stop.txt')
count = 0;
featureList = []
tweets = []
for row in inpTweets:
sentiment = row[0]
tweet = row[1]
processedTweet = processTweet(tweet)
featureVector = getFeatureVector(processedTweet, stopWords)
featureList.extend(featureVector)
tweets.append((featureVector, sentiment))
# Remove featureList duplicates
featureList = list(set(featureList))
# Generate the training set
training_set = nltk.classify.util.apply_features(extract_features, tweets)
# Train the Naive Bayes classifier
NBClassifier = nltk.NaiveBayesClassifier.train(training_set)
# Test the classifier
with open('C:/CleanedNewGSMain.txt', 'r') as csvinput:
with open('GSnewmain.csv', 'w') as csvoutput:
writer = csv.writer(csvoutput, lineterminator='\n')
reader = csv.reader(csvinput)
all=[]
row = next(reader)
for row in reader:
processedTestTweet = processTweet(row)
sentiment = NBClassifier.classify(
extract_features(getFeatureVector(processedTestTweet, stopWords)))
row.append(sentiment)
processTweet(row[1])
writer.writerows(all)
किसी भी मदद की सराहना की बड़े पैमाने पर किया जाएगा।
तेज प्रतिक्रिया के लिए धन्यवाद। मैं जो कोशिश कर रहा हूं वह है: मेरे पास 1000 पॉजिटिव और 1000 नकारात्मक कथन के साथ एक छोटा, लेबल किया गया .csv प्रशिक्षण सेट है। प्रशिक्षण यह काम करता प्रतीत होता है क्योंकि मैंने टेस्ट स्टेटमेंट में बस हार्ड कोडिंग द्वारा इसका परीक्षण किया था। ' यह बहुत अच्छा है!'। हालांकि, मेरे पास लगभग 10000 ट्वीट्स और फेसबुक पोस्टिंग वाली एक फाइल है और मैं इसे इस कार्यक्रम में खोलना चाहता हूं और नैवे बेयस का उपयोग करके इसकी भावना का परीक्षण करना चाहता हूं। मुझे नहीं लगता कि मैं सीएसवी रीडर का सही ढंग से उपयोग कर रहा हूं लेकिन मैं अभी तक अपनी अंगुली नहीं डाल सकता .. – user3670554