Skip to content

Instantly share code, notes, and snippets.

@chengjun
Last active August 29, 2015 14:03
Show Gist options
  • Select an option

  • Save chengjun/44cf28565671cb65dcf0 to your computer and use it in GitHub Desktop.

Select an option

Save chengjun/44cf28565671cb65dcf0 to your computer and use it in GitHub Desktop.
calculate_sentiment
def caculate_single_sentence_sentiment(group):
gsen = 0
no_words = group[0][0][0][0][0] # 否定词
level_words = group[0][0][0][0][1] # 程度词
sen_words = group[0][0][0][0][2] # 情感词
no_words_positions = [no_word[2] for no_word in no_words]
level_words_positions = [level_word[2] for level_word in level_words]
num_no_words = len(no_words)
weight = 1
# 第一层:根据否定词的个数进行句法分析
if len(no_words) == 1: ## 存在一个否定词
level_words_after_score = 0
level_words_before_score = 0
for no_word in no_words: # 从否定词开始
for i in range(len(level_words_positions)):
if level_words_positions[i] > no_word[2]: ### 否定词在前
level_words_after_score += level_words[i][1]
elif level_words_positions[i] < no_word[2]:
level_words_before_score += level_words[i][1]
if no_word[2] > max(level_words_positions):
weight = 1 # 很不开心,是表示非常不开心。
else:
weight= 0.5 # 我不太开心 是表示有点不开心。
if level_words_after_score ==0:
level_words_after_score =1
if level_words_before_score ==0:
level_words_before_score =1
gsen = weight*level_words_before_score*-1*level_words_after_score*sen_words[1] # 没有考虑唯一性
elif len(no_words) == 2: ## 存在2个否定词
#“没有不开心”表示开心,假设情感值为+5分,那么“没有非常不开心”是多少分? - 黠之大者 >删除
#没有非常不开心,应该得分在-3分左右,有一点不开心
level_words_after_score = 0
level_words_before_score = 0
for no_word in no_words: # 从否定词开始
if no_word[2] == min(no_words_positions): ### 前面的程度词
for i in range(len(level_words_positions)):
if level_words_positions[i] < no_word[2]:
level_words_before_score += level_words[i][1]
elif no_word[2] == max(no_words_positions): ### 后面的程度词
for i in range(len(level_words_positions)):
if level_words_positions[i] < no_word[2] and level_words_positions[i]> min(no_words_positions) : ### 否定词在前
level_words_after_score += level_words[i][1]
weight = -0.5
if level_words_after_score ==0:
level_words_after_score =1
if level_words_before_score ==0:
level_words_before_score =1
gsen = (level_words_after_score*weight)*sen_words[1]/(level_words_before_score)
elif len(no_words) > 2: ##三个以上否定词
if num_no_words%2 ==0:
weight = 1
else:
weight = -1
gsen = weight*sen_words[1]
elif len(no_words) == 0: ##没有否定词
level_words_before_score = 0
for i in level_words:
level_words_before_score +=i[1]
if level_words_before_score ==0:
level_words_before_score =1
gsen = sen_words[1]*level_words_before_score
return gsen
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment