码字小白菜努力中 2024-05-13 20:19 采纳率: 88%
浏览 14
已结题

Python中用snownlp库进行情感分析,要求增加情感类别对不同情感进行标记。

在情感分析时,将情感程度划分成三个区间,分别是[0,0.4)为消极倾向,[0.4,0.6)为中性倾向,[0.6,1]为积极倾向,都保留6位小数,以便能够直观地观察每个评论语句的情感态度,表 2 选取了几个极具代表性的语句,如表 2所示。
在现有的代码中增加情感类别这一内容。

#导入数据分析需要的包
import pandas as pd
#可视化包9
import matplotlib.pyplot as plt
from snownlp import SnowNLP

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

# 导入数据集
data = pd.read_csv('sf02_data.csv')

#主要分析评论情感,只截取部分字段
data1 = data[['sf_content', 'sf_creationTime']]

#把sf_creationTime转换为时间序列类型
data1['sf_creationTime'] = pd.to_datetime(data1['sf_creationTime'])

#因为该数据集时间跨度比较长,这里值选择其中一年的评论
data1 = data1[(data1['sf_creationTime'] < pd.to_datetime('20231231')) & (data1['sf_creationTime'] > pd.to_datetime('20230101'))]

#并且以月份作为x轴显示
data1['sf_creationTime'] = data1['sf_creationTime'].dt.month
data1.head(10)

#定义函数
def get_sentiment_cn(text):
    s = SnowNLP(text)
    return s.sentiments

# 应用函数
data1["sentiment"] = data1.sf_content.apply(get_sentiment_cn)
data1.head(10)

#查看整体评分以及分布状态
data1.sentiment.describe()

#查看时间序列评论情感分布,这里查看的是2023年各月份评论情感分布
data01 = data1[['sf_creationTime','sentiment']]
data01.boxplot(by='sf_creationTime',figsize=(20,10))
plt.title('2023年各月份评论情绪分布')
plt.xlabel('月份')
plt.ylabel('sentiment')
plt.show()

#查看情感得分最低的一条评论
data1.sort_values(by=['sentiment'], ascending=[True])[:1]

#查看这条评论的完整内容
print(data1.sort_values(['sentiment']).iloc[0].sf_content)

img

  • 写回答

3条回答 默认 最新

  • 笑面虎 2024-05-13 20:19
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】: 您的目的是在Python中使用snownlp库进行情感分析,并根据情感评分将情感类别划分为三个区间:消极、中性、积极。您需要在现有的代码中增加一个功能,以便能够根据情感评分自动标记每个评论语句的情感类别。

    【图片内容】: 您上传的图片是一张表格,展示了几个评论样本及其情感评分和情感类别。表格中列出了评论人、评论日期、评论内容、情感评分和情感类别。

    【问题出现原因】: 问题出现的原因是您现有的代码可以计算情感评分,但还没有实现根据评分自动将评论语句分类到相应的情感类别(消极、中性、积极)的功能。

    【问题解决方案】: 为了解决这个问题,您需要在代码中添加一个部分,这部分将根据情感评分为每条评论语句分配一个情感类别。具体来说,您需要定义一个函数或逻辑,根据您提供的评分区间来分类情感。

    【提供代码】: 以下是修改后的代码,其中包含了根据情感评分自动分类情感类别的部分:

    # 其他代码保持不变
    
    # 定义情感类别的函数
    def categorize_sentiment(score):
        if score < 0.4:
            return '消极'
        elif 0.4 <= score < 0.6:
            return '中性'
        else:
            return '积极'
    
    # 应用函数,为每条评论添加情感类别
    data1['sentiment_category'] = data1.sentiment.apply(categorize_sentiment)
    
    # 其他代码保持不变
    
    # 展示结果,包括情感类别
    data1[['sf_content', 'sentiment', 'sentiment_category']].head(10)
    

    【代码运行方式】: 您需要在一个Python环境中运行这段代码,这个环境需要安装有pandas、matplotlib和snownlp库。您可以使用Jupyter Notebook或任何其他Python IDE来运行这段代码。

    【代码预期运行结果】: 代码运行后,您将看到一个新的列 sentiment_category,它将显示每条评论的情感类别,可以是“消极”、“中性”或“积极”。

    【推荐相关链接】:

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 5月13日
  • 已采纳回答 5月13日
  • 创建了问题 5月13日

悬赏问题

  • ¥30 为什么会失败呢,该如何调整
  • ¥50 如何在不能联网影子模式下的电脑解决usb锁
  • ¥20 服务器redhat5.8网络问题
  • ¥15 如何利用c++ MFC绘制复杂网络多层图
  • ¥20 要做柴油机燃烧室优化 需要保持压缩比不变 请问怎么用AVL fire ESE软件里面的 compensation volume 来使用补偿体积来保持压缩比不变
  • ¥15 python螺旋图像
  • ¥15 算能的sail库的运用
  • ¥15 'Content-Type': 'application/x-www-form-urlencoded' 请教 这种post请求参数,该如何填写??重点是下面那个冒号啊
  • ¥15 找代写python里的jango设计在线书店
  • ¥15 请教如何关于Msg文件解析