习题解析之:评论信息极性分析
【问题描述】
编写一个能对评论数据进行极性分析的程序。
相关知识
为了完成本关任务,你需要掌握:
读取CSV文件。
自然语言处理第三方库snownlp中相关函数。
文件读取
第三方库snownlp
snownlp是针对中文语言进行自然语义处理的第三方库,它可以用于中文文本的分词、词性标注、情感分析、文本分类等任务。
本地安装指令为 pip install snownlp
如:
import snownlp
s1 = "我英语考试过了"
t1 = snownlp.SnowNLP(s1) #基于中文字符串 s1 创建 SnowNLP Object。
print(t1.sentiments) # 输出浮点数值0.8535288346560954
s2 = "我对英语成绩很失望。"
t2 = snownlp.SnowNLP(s) #基于中文字符串 s2 创建 SnowNLP Object。
print(t2.sentiments) # 输出浮点数值0.35796702760616605
sentiments代表s字符串创建的snownlp Object的情感极性指数,取值范围为[0,1]。
值越接近1表明越积极,越接近0表明越消极。
编程要求
分析数据文件comment.csv,编码格式为GBK,正确读取。

数据说明:
A列label表明好评或差评,字符串1代表好评,字符串0代表差评。
B列review为各条评论文本信息。
使用snownlp库分别对每条评论信息进行情感极性分析,按照下列要求分别输出指定信息。(格式参照测试说明)
如果输入为正面评论,输出该文件中snownlp情感极性最高的评论信息(极性降序第0位)。
如果输入为负面评论,输出该文件中snownlp情感极性最低的评论信息(极性升序第0位)。
如果输入为冲突评论,输出该文件中snownlp极性分析结果与文件label列不符的评论信息*,按极性指数从低到高排列。
* 冲突评论:数据label列为字符串1,但对应评论信息极性小于0.5;或者数据label列为字符串0,但对应评论信息极性大于等于0.5。
评论信息输出格式为一维列表形式,如[label, review, sentiments]
如果输入为评论分析,输出该文件中snownlp情感极性积极(sentiments>=0.5)与消极(sentiments<0.5)的信息条数。
示例
输入:
负面评论
输出:
['0', '本来打算在这里入住2天的,但是由于网络极差,导致本人的网络会议数度中断,严重影响工作,所以匆忙离开。对客房的映像很模糊了,唯有哪位业余的IT令我映像深刻!大堂的装修还算可以,服务员也比较热情。对于那些要求高品质网络的用户,不提倡入住。', 1.0098503366862133e-07]
示例2
输入:
正面评论
输出:
['1', '我是十月二号住的,各方面的设施还不错,离太古城很近还有酒店免费BUS,值的!', 0.9315955395657993]
示例3
输入:
评论分析
输出:
正面评论:42条
负面评论:24条'
示例4
输入:
冲突评论
输出:
['1', '距离火车站非常近,走路5分钟就能到,在市中心,去哪个地方,交通都比较方便。入住比较晚,晚上10点钟左右,想订餐被告知下班了,想到宾馆小卖部买点方便面,没想到也关门,这一点不太方便。房间还行。', 0.002652099778034489]
['1', '前台的服务很不错,快捷、周到、让人感觉很好。房间环境还可以,就是床垫太差,躺在上面能感觉到弹簧,该换了。', 0.37067241062266776]
['0', '我去年的时候去过该酒店,那时候住的是高级房,就是不让抽烟,其余感觉一般,比学校的老宿舍要强。', 0.8745810372887357]
【编程思路】
用分支结构按题目要求分别处理,编写的源程序如下:

浙公网安备 33010602011771号