设计一个复杂的情感分析系统,结合词向量、情感词典和规则系统,用于数字人文研究中的高阶情感分析。这个示例将展示如何处理中文文本的细腻情感。
主要代码功能说明
-
初始化部分:
- 定义六种基本情感维度(喜悦、愤怒、悲伤、恐惧、惊讶、厌恶)
- 设置情感强度修饰词及其权重
- 定义否定词和转折词集合
- 初始化情感词典权重
-
文本处理部分:
_preprocess_text
: 使用jieba进行分词,清理标点符号_detect_negation
: 检测否定词的影响范围(前3个词)_detect_transition
: 检测文本中的转折关系
-
情感分析部分:
_calculate_emotion_vector
: 计算情感向量_normalize_vector
: 归一化情感向量_calculate_emotional_complexity
: 使用熵计算情感复杂度
-
结果处理部分:
_combine_results
: 合并转折前后的分析结果- 输出包含情感向量、主导情感、情感强度和复杂度的完整分析
特殊处理机制:
权重衰减:
self.emotion_weights[word] = 1.0 - (i * 0.1)
转折处理:
combined_vector[emotion] = (
0.3 * before_transition['emotion_vector'].get(emotion, 0) +
0.7 * after_transition['emotion_vector'].get(emotion, 0)
)
情感复杂度计算:
entropy -= p * math.log2(p)
这个系统的优势在于:
- 多维度情感分析
- 考虑上下文影响
- 支持复杂情感表达
- 可量化的情感强度和复杂度
- 灵活的权重调节系统
完整代码
import numpy as np
from collections import defaultdict
import re
import jieba
import math
class AdvancedSentimentAnalyzer:
def __init__(self):
# 情感维度定义
self.emotion_dimensions = {
'joy': ['喜悦', '开心', '快乐', '兴奋', '愉悦'],
'anger': ['愤怒', '恼火', '气愤', '暴躁', '激动'],
'sadness': ['悲伤', '沮丧', '失落', '痛苦', '忧郁'],
'fear': ['恐惧', '害怕', '担忧', '焦虑', '紧张'],
'surprise': ['惊讶', '震惊', '意外', '诧异', '错愕'],
'disgust': ['厌恶', '反感', '讨厌', '憎恶', '鄙视']
}
# 情感强度修饰词
self.intensity_modifiers = {
'极其': 2.0, '非常': 1.8, '特别': 1.6, '很': 1.4, '较': 1.2,
'有点': 0.8, '稍微': 0.6, '略微': 0.4
}
# 否定词
self.negation_words = {'不', '没', '无', '非', '莫', '勿', '未', '否'}
# 转折词