基于 NLP深度学习情感分析系统(大一建议收藏)
这段代码的主要功能是对一组中文文本进行情感分析,将情感细分为“喜”“怒”“哀”“乐”“积极”“消极”“中性”等类别,并输出每段文本的情感倾向和对应的情感得分。代码借助SnowNLP库完成基本的情感极性判断,同时结合自定义的情感词典进一步细化情感分类。# 先根据 SnowNLP 的得分判断大致积极消极return "喜", sentiment_scorereturn "乐", sentiment_s
·
Python 机器学习案例情感分析(建议收藏)

整体功能概述
这段代码的主要功能是对一组中文文本进行情感分析,将情感细分为“喜”“怒”“哀”“乐”“积极”“消极”“中性”等类别,并输出每段文本的情感倾向和对应的情感得分。代码借助 SnowNLP 库完成基本的情感极性判断,同时结合自定义的情感词典进一步细化情感分类。
代码结构及各部分功能
1. 导入必要的库
from snownlp import SnowNLP
这行代码导入了 SnowNLP 库,它是一个用于中文自然语言处理的 Python 库,可进行文本的情感分析、分词、词性标注等操作。在本代码中,主要使用其情感分析功能。
2. 构建情感词典
joy_words = ["开心", "快乐", "兴奋", "惊喜", "愉悦", "狂喜", "欣喜"]
anger_words = ["生气", "愤怒", "恼火", "气愤", "恼怒", "发火"]
sorrow_words = ["伤心", "难过", "悲痛", "哀伤", "沮丧", "忧郁"]
amusement_words = ["有趣", "好玩", "逗乐", "欢乐"]
这里定义了四个列表,分别存储与“喜”“怒”“哀”“乐”相关的情感词汇。这些词汇将用于后续的情感细分,当文本中出现这些词汇时,会将其情感归为对应的类别。
3. 定义情感分类函数
def classify_emotion(text):
s = SnowNLP(text)
sentiment_score = s.sentiments
# 先根据 SnowNLP 的得分判断大致积极消极
if sentiment_score > 0.5:
for word in joy_words:
if word in text:
return "喜", sentiment_score
for word in amusement_words:
if word in text:
return "乐", sentiment_score
return "积极", sentiment_score
elif sentiment_score < 0.5:
for word in anger_words:
if word in text:
return "怒", sentiment_score
for word in sorrow_words:
if word in text:
return "哀", sentiment_score
return "消极", sentiment_score
else:
return "中性", sentiment_score
- 输入:一个中文文本字符串
text。 - 功能:
- 使用
SnowNLP对输入的文本进行情感分析,得到情感得分sentiment_score。该得分范围在 0 到 1 之间,越接近 1 表示积极情感越强,越接近 0 表示消极情感越强。 - 根据情感得分进行初步的积极、消极或中性判断:
- 若得分大于 0.5,认为文本具有积极情感。接着检查文本中是否包含
joy_words或amusement_words中的词汇,如果包含则分别返回“喜”或“乐”及对应的得分;若不包含则返回“积极”及得分。 - 若得分小于 0.5,认为文本具有消极情感。检查文本中是否包含
anger_words或sorrow_words中的词汇,如果包含则分别返回“怒”或“哀”及对应的得分;若不包含则返回“消极”及得分。 - 若得分等于 0.5,认为文本情感为中性,返回“中性”及得分。
- 若得分大于 0.5,认为文本具有积极情感。接着检查文本中是否包含
- 使用
- 输出:一个元组,包含情感倾向(如“喜”“怒”等)和对应的情感得分。
4. 定义待分析的中文文本列表
chinese_texts = [
# 此处省略具体文本内容
]
这是一个包含 40 条中文文本的列表,这些文本涵盖了积极、消极和中性等不同情感倾向的内容,用于后续的情感分析。
5. 进行情感分析并输出结果
# 进行情感分析
for text in chinese_texts:
emotion, score = classify_emotion(text)
print(f"文本: {text}")
print(f"情感倾向: {emotion}")
print(f"情感得分: {score:.2f}")
print("-" * 50)
- 遍历
chinese_texts列表中的每一条文本。 - 调用
classify_emotion函数对每条文本进行情感分析,得到情感倾向和得分。 - 打印出文本内容、情感倾向和保留两位小数的情感得分,并使用分隔线进行分隔,使输出结果更加清晰易读。
from snownlp import SnowNLP
# 构建情感词典
joy_words = ["开心", "快乐", "兴奋", "惊喜", "愉悦", "狂喜", "欣喜"]
anger_words = ["生气", "愤怒", "恼火", "气愤", "恼怒", "发火"]
sorrow_words = ["伤心", "难过", "悲痛", "哀伤", "沮丧", "忧郁"]
# 可以认为乐和喜有一定重合,这里“乐”更偏向于轻松欢快场景
amusement_words = ["有趣", "好玩", "逗乐", "欢乐"]
# 定义情感分类函数
def classify_emotion(text):
s = SnowNLP(text)
sentiment_score = s.sentiments
# 先根据 SnowNLP 的得分判断大致积极消极
if sentiment_score > 0.5:
for word in joy_words:
if word in text:
return "喜", sentiment_score
for word in amusement_words:
if word in text:
return "乐", sentiment_score
return "积极", sentiment_score
elif sentiment_score < 0.5:
for word in anger_words:
if word in text:
return "怒", sentiment_score
for word in sorrow_words:
if word in text:
return "哀", sentiment_score
return "消极", sentiment_score
else:
return "中性", sentiment_score
# 待分析的中文文本列表
chinese_texts = [
"这绝对是我近期看到最棒的微博了,内容超有料,必须点赞收藏!",
"博主太牛了,把这个问题剖析得如此透彻,瞬间让我茅塞顿开。",
"哇塞,这图片的画质和构图简直完美,每一处细节都无可挑剔。",
"这个视频太精彩啦,节奏紧凑又有趣,全程都让人目不转睛。",
"不得不说,博主分享的这个方法太实用了,我试了一下效果超棒。",
"这篇微博就像一束光,给我带来了新的启发和希望,爱了爱了。",
"感觉博主就是个宝藏,每次的分享都能给我带来惊喜。",
"这个活动的创意太棒了,既有趣又有意义,必须支持。",
"博主的文笔太赞了,文字优美且富有感染力,让人沉浸其中。",
"这组照片拍得美轮美奂,仿佛把我带入了一个梦幻的世界。",
"哇,博主的才艺太厉害了,简直是全能选手,太让人佩服了。",
"这个观点太新颖独特了,为博主的创新思维点赞。",
"内容好有深度,看得出博主花了很多心思,强烈推荐。",
"这美食的介绍太诱人了,光看文字我都流口水了,必须去试试。",
"这微博写得什么呀,内容乱七八糟,完全没有逻辑。",
"博主分享的这个方法根本没用,浪费了我不少时间。",
"这图片的质量太差了,模糊不清,完全影响观看体验。",
"这个视频好无聊啊,节奏拖沓,看得我都快睡着了。",
"什么破活动,规则复杂又没吸引力,一点都不想参与。",
"博主的观点太片面了,根本没有考虑到实际情况。",
"这篇微博就是在凑字数,没有一点实质内容,失望。",
"照片拍得毫无美感,角度和光线都没把握好。",
"博主的讲解太糟糕了,说得含糊不清,我完全没听懂。",
"这个创意太老套了,一点新意都没有,真让人提不起兴趣。",
"内容太水了,感觉就是在敷衍了事,以后不会再看了。",
"这美食的描述和实际根本不符,夸大其词,太让人失望了。",
"博主更新得越来越慢了,一点都不敬业,都快取关了。",
"这篇微博的内容有一定的参考价值,不过有些地方还可以再完善。",
"图片拍得中规中矩,没有特别出彩的地方,但也不难看。",
"这个视频的内容比较普通,没有给我留下太深刻的印象。",
"博主分享的方法有一定可行性,但可能需要根据实际情况调整。",
"活动的形式还可以,不过吸引力不是特别大。",
"博主的观点有一定道理,但也存在一些值得商榷的地方。",
"这篇微博的文笔还算流畅,但内容缺乏一些亮点。",
"照片的效果还行,能把场景展示清楚,但没有独特的风格。",
"博主的讲解比较清晰,但深度可能还不够。",
"这个创意有一定的想法,但还不够成熟,有待改进。",
"内容中规中矩,没有特别突出的地方,但也没有明显的缺点。",
"这美食的介绍让我有一点兴趣,但还不至于特别想去尝试。",
"博主的更新频率还算稳定,不过内容的质量可以再提高一些。"
]
# 进行情感分析
for text in chinese_texts:
emotion, score = classify_emotion(text)
print(f"文本: {text}")
print(f"情感倾向: {emotion}")
print(f"情感得分: {score:.2f}")
print("-" * 50)
总结
这段代码通过 SnowNLP 库和自定义的情感词典,实现了对中文文本的情感分析和细分,能够较为准确地判断文本的情感倾向,并将其归为更细致的情感类别。
更多推荐
所有评论(0)