如何计算pos / neg / neu得分句子

时间:2018-05-07 16:33:33

标签: python

我有以下代码:

def sent_dictionary__sentence_(text):
    token_dictionary = {}
    neg_count = []
    pos_count = []
    neu_count = []
    lexicon_keys = lexicon_dictionary.keys()
    sentences = sent_tokenize(text)
    for sentence in sentences:
            tokens = apply_lemmatization(remove_punctuation(word_tokenize(str(sentence))))
            for token in tokens:
                if token in lexicon_keys:
                    token_dictionary[token] = token_dictionary.get(token, 0) + lexicon_dictionary[token]
                    new_token_dict = token_dictionary
                    txt_values = list(new_token_dict.values())
                    if sum(txt_values) == 0:
                        neu_count.append(sentence)
                    if sum(txt_values) > 0:
                        pos_count.append(sentence)
                    if sum(txt_values) < 0:
                        neg_count.append(sentence)
    print(len(neg_count))
    print(len(neu_count))
    print(len(pos_count))

我想做什么:

我有一个文本文档,我想用句子分割,然后按字分割,这样我就能看出句子中的单词是否在SentiWordNet字典中。如果单词位于SentiWord dictionary ...中,则该单词具有相关分数,如果同一单词有多个,则添加分数。

然后根据这些信息,我想在每个句子中添加单词的分数,并打印出有多少正面句子,多少负面,以及多少中立。

当我尝试在一个包含152个句子的文本文档上使用它时,我获得了1473个积极的, 31为负面, 1203为中立,这显然是错误的。我能为此代码实际工作做些什么?

提前致谢。

编辑:

认为我修复了它。如果有人好奇,这里是更新的代码:

def sent_dictionary__sentence_(text):
    token_dictionary = {}
    neg_count = []
    pos_count = []
    neu_count = []
    lexicon_keys = lexicon_dictionary.keys()
    sentences = sent_tokenize(text)
    for sentence in sentences:
            tokens = apply_lemmatization(remove_punctuation(word_tokenize(str(sentence))))
            for token in tokens:
                if token in lexicon_keys:
                    token_dictionary[token] = token_dictionary.get(token, 0) + lexicon_dictionary[token]
                    new_token_dict = token_dictionary
                    txt_values = list(new_token_dict.values())
    for sentence in sentences:
            if sum(txt_values) == 0:
                neu_count.append(sentence)
            if sum(txt_values) > 0:
                pos_count.append(sentence)
            if sum(txt_values) < 0:
                neg_count.append(sentence)
    print("neg count: " + str(len(neg_count)))
    print("neu count: " + str(len(neu_count)))
    print("pos count: " + str(len(pos_count)))

编辑:

不,我没有解决它。我用“我能够。我无能为力”。去测试。我能够是积极的。我无能为力。所以输出应该是:

neg count: 1
pos count: 1

相反它说:pos count:2

编辑:

我得到了这条建议,但我不太确定如何实施它。

“我认为你的代码最大的问题是text_values在每次迭代后都没有保存在任何地方,因此它内部的最终值将是循环的最后一次迭代中的任何内容。你应该创建三个变量,每个音调计数一个,并在for循环的每个周期递增一个。然后你甚至不需要第二个for循环,只能打印出值。“

0 个答案:

没有答案