繁体   English   中英

NLTK情绪分析只返回一个值

[英]NLTK sentiment analysis is only returning one value

我非常讨厌发布一个关于整个代码块的问题,但是我在过去的3个小时里一直在研究这个问题而且我无法理解正在发生的事情。 我有大约600条推文,我从一个CSV文件中检索到不同的分数值(介于-2到2之间)反映了对总统候选人的情绪。

但是,当我在任何其他数据上运行此训练样本时,只返回一个值(正数)。 我已经检查过是否正确添加了分数。 对我来说没有意义的是,85,000条推文都会被600多种训练集评为“积极”。有谁知道这里发生了什么? 谢谢!

import nltk
import csv

tweets = []
import ast
with open('romney.csv', 'rb') as csvfile:
    mycsv = csv.reader(csvfile)
    for row in mycsv:
        tweet = row[1]
        try:
            score = ast.literal_eval(row[12])
            if score > 0:
                print score
                print tweet
                tweets.append((tweet,"positive"))

        elif score < 0:
            print score
            print tweet
            tweets.append((tweet,"negative"))
    except ValueError:
        tweet = ""

def get_words_in_tweets(tweets):
    all_words = []
    for (words, sentiment) in tweets:
      all_words.extend(words)
    return all_words

def get_word_features(wordlist):
    wordlist = nltk.FreqDist(wordlist)
    word_features = wordlist.keys()
    return word_features

def extract_features(document):
    document_words = set(document)
    features = {}
    for word in word_features:
    features['contains(%s)' % word] = (word in document_words)
    return features

word_features = get_word_features(get_words_in_tweets(tweets))
training_set = nltk.classify.apply_features(extract_features, tweets)
classifier = nltk.NaiveBayesClassifier.train(training_set)
c = 0
with open('usa.csv', "rU") as csvfile:
    mycsv = csv.reader(csvfile)
    for row in mycsv:
        try:
            tweet = row[0]
            c = c + 1
                    print classifier.classify(extract_features(tweet.split()))                                                                                                                                                                                     
        except IndexError:
            tweet = ""

朴素贝叶斯分类器在评估文档中出现的单词时通常效果最佳,而忽略单词的缺失。 既然你用了

features['contains(%s)' % word] = (word in document_words)

每个文档主要由值= False的要素表示。

尝试改为:

if word in document_words:
   features['contains(%s)' % word] = True

(你应该更改for循环以获得比循环词典中所有单词更有效的东西,而不是循环在文档中出现的单词)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM