Я пытаюсь запустить анализ настроений. Мне удалось использовать Naive Bayes через nltk, чтобы классифицировать корпус отрицательных и положительных твитов. Однако я не хочу проходить процесс запуска этого классификатора каждый раз, когда я запускаю эту программу, поэтому я пытался использовать pickle для сохранения, а затем загружать в другой скрипт классификатор. Однако, когда я пытаюсь запустить скрипт, возвращает ошибку NameError: имя классификатор не определен, хотя я думал, что это было определено через ДЕФ load_classifier():Загрузка классификатора с использованием Pickle?
код у меня есть атм ниже:
import nltk, pickle
from nltk.corpus import stopwords
customstopwords = ['']
p = open('xxx', 'r')
postxt = p.readlines()
n = open('xxx', 'r')
negtxt = n.readlines()
neglist = []
poslist = []
for i in range(0,len(negtxt)):
neglist.append('negative')
for i in range(0,len(postxt)):
poslist.append('positive')
postagged = zip(postxt, poslist)
negtagged = zip(negtxt, neglist)
taggedtweets = postagged + negtagged
tweets = []
for (word, sentiment) in taggedtweets:
word_filter = [i.lower() for i in word.split()]
tweets.append((word_filter, sentiment))
def getwords(tweets):
allwords = []
for (words, sentiment) in tweets:
allwords.extend(words)
return allwords
def getwordfeatures(listoftweets):
wordfreq = nltk.FreqDist(listoftweets)
words = wordfreq.keys()
return words
wordlist = [i for i in getwordfeatures(getwords(tweets)) if not i in stopwords.words('english')]
wordlist = [i for i in getwordfeatures(getwords(tweets)) if not i in customstopwords]
def feature_extractor(doc):
docwords = set(doc)
features = {}
for i in wordlist:
features['contains(%s)' % i] = (i in docwords)
return features
training_set = nltk.classify.apply_features(feature_extractor, tweets)
def load_classifier():
f = open('my_classifier.pickle', 'rb')
classifier = pickle.load(f)
f.close
return classifier
while True:
input = raw_input('I hate this film')
if input == 'exit':
break
elif input == 'informfeatures':
print classifier.show_most_informative_features(n=30)
continue
else:
input = input.lower()
input = input.split()
print '\nSentiment is ' + classifier.classify(feature_extractor(input)) + ' in that sentence.\n'
p.close()
n.close()
Любая помощь была бы замечательной, кажется, что сценарий делает это для печати '\ nSentiment is' + classifier.classify (feature_extractor (input)) + 'в этом предложении. \ N' "перед возвратом ошибки ...