【网页处理与文本分析】某电视剧弹幕信息情感分析

任务详情:

下方给定某电视剧(共 12 集)的弹幕信息,完成下方指定任务。 

任务一:删除内容为空的弹幕(行),该行存在空值就需要删除。

任务二:使用 SnowNLP 库获取指定剧集点赞数量大于等于 100 的弹幕的情感极性平均得分。比如指定剧集series_num=5,返回第5集弹幕(点赞数量>=100)的情感极性平均得分

含义内容点赞数量剧集
列名contentslikeCounttv_name

说明:

1. 某集弹幕情感极性平均得分=该集弹幕情感极性得分总和 / 该集弹幕(点赞数量>=100)总数。

任务要求:

1. 程序接收某一剧集集数 series_numint,程序返回结果是该剧集的弹幕情感极性平均得分,需要四舍五入保留两位小数,返回类型为 float

2. 某电视剧弹幕信息是以逗号分割的csv文件,utf-8 编码。

思路:

1.根据任务一提示的,使用dropna()去除空值的行

2.因为本题的数据太多要进行分割处理,否则就会运行超时。使用Numpy里np.array_split(a,几块,axis = 0或1)分割成12块,刚好对应12集。把传入的值当成下标,再处理一下下标位置就可以对这个所需的块进行操作。

 (感觉这道题有点凑巧,分割之后,每块里也只有一两个别的数据,但是按照任务二点赞数量大于100这个要求,也并没有太影响,只有两个数据需要再加个if判断,拼一下前面的一块)

 

3.遍历新得到的那块数据的'likeCount'列的数据进行判断,如果小于100,使用df[df['columns']==元素].index获取到其索引,使用pandas里的drop()方法把那些不符合要求的直接删除掉那一行,并直接修改原始的值inplace = True,随后重置下索引。

4.遍历其弹幕内容,使用SnowNLP里的SnowNLP(x).sentiments方法对其每个元素进行情感分析,并追加到列表里。在Datafream新生成一列,把这个列表赋值过去。

5.使用groupby('columns').sum()方法把数据组合起来,得到这一集的所有情感分析的总和

6.遍历'tv_name'列的数据和传入的值进行判断统计个数。(因为之前已经把小于100的给删掉了,所以不用再做其他判断了)

7.最后按照要求返回(该集弹幕情感极性得分总和 / 该集弹幕(点赞数量>=100)总数),并做好类型处理即可。

代码如下:

import pandas as pd
from snownlp import SnowNLP
import numpy as np

class Solution:
  
    def TvSeriesEmotionalTask(self, series_num: int) -> float:
        url='#######'
        df=pd.read_csv(url,sep=',')
        df=df.dropna(axis=0,how='any').reset_index()#去除nan值
        df_list=np.array_split(df,12,axis=0)#把DataFrame切片
        if series_num==3:
            new_df=pd.concat([df_list[series_num-1],df_list[series_num-2]],axis=0,ignore_index=True)
        elif series_num==10:
            new_df=pd.concat([df_list[series_num-1],df_list[series_num-2]],axis=0,ignore_index=True)
        else:
            new_df=df_list[series_num-1]
        for x in new_df['likeCount'].values:
            if x <100:
                new_df.drop(index=new_df[new_df['likeCount']==x].index,axis=0,inplace = True)
        new_df=new_df.reset_index()#重置索引
        #情感分析
        good=[]
        for x in new_df['contents'].values:
            s=SnowNLP(x)
            good.append(s.sentiments)
        new_df['good']=good
        df1=new_df.groupby('tv_name').sum()
        count=0
        for x in new_df['tv_name'].values:
            if x==series_num:
                count+=1
        res=float('%.2f'%(df1['good'][series_num]/count))
        return res
        pass

以上仅代表个人的思路,如有欠缺请指教。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

红鼻子z

感谢打赏,我会继续努力的!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值