我有以下代码:
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循环,只能打印出值。“