Я пытаюсь реплицировать Go Et Al. Анализ настроений в Twitter, который можно найти здесь http://help.sentiment140.com/for-students Проблема, с которой я столкнулась, - это количество функций 364464. В настоящее время я использую nltk и nltk.NaiveBayesClassifier, чтобы сделать это, когда твиты содержат репликацию из 1,600,000 твитов и там полярность:Python nltk классифицируют с помощью большого набора функций (Replicate Go Et Al 2009)
for tweet in tweets:
tweet[0] = extract_features(tweet[0], features)
classifier = nltk.NaiveBayesClassifier.train(training_set)
# print "NB Classified"
classifier.show_most_informative_features()
print(nltk.classify.util.accuracy(classifier, testdata))
Все не очень долго, кроме как extract_features функционировать
def extract_features(tweet, featureList):
tweet_words = set(tweet)
features = {}
for word in featureList:
features['contains(%s)' % word] = (word in tweet_words)
return features
Это происходит потому, что для каждого чирикать это создания словаря размером 364,464 представлять ли что-то присутствует или нет.
Есть ли способ сделать это быстрее или эффективнее, не уменьшая количество функций, как в этой статье?
Интересно, почему вы не хотите использовать те же методы, что и в работе. В любом случае, основные шаги NLP, которые вы могли бы предпринять, включают в себя: удаление стоп-слов, выполнение векторизации tfidf и удаление менее распространенных или очень распространенных слов ... Они также удаляли бы функции, но только по-другому. Как я уже сказал, я не совсем уверен, что вы хотите сделать. – lrnzcig
Я сталкивался с проблемами памяти, как вы можете себе представить, но мне удалось это решить. Спасибо за ответ – Adam