看下《风起洛阳》这两天的评论情感倾向

2021-12-04 03:50:10 Python 阅读 (1997) 评论(0)

       

         昨天写了个程序成功“找出”了《当家主母》的主角,今天再搞点其他的玩玩。前两天《风起洛阳》开播了,这部剧改编自马伯庸的小说《洛阳》,刚开播豆瓣上的评论就两极分化了(这是我验证过的结果),这里我也尝试分析下这些评论的情感倾向,看下用户对这部剧的喜好与否。



1.数据准备

        先写个爬虫把豆瓣上的《风起洛阳》的评论抓下来。豆瓣这个网站很有意思,看一个电影或者电视剧的评论,如果不登录的话,在豆瓣网页上只能看大概200条评论,登录也只能看500条左右的评论,就很迷!

        登录下豆瓣,然后把cookie复制到代码里,就能抓到500多条评论,存到txt文本里备用。

import requests
from lxml import etree

url = "https://movie.douban.com/subject/33442334/comments?start={}&limit=20&sort=new_score&status=P&percent_type="

headers = {
   'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3724.8 Safari/537.36',
   'Connection': 'keep-alive',
   'cookie': 'Your cookie‘’,
}

with open("./fqly_comment.txt", "w", encoding='utf-8') as f:
   start = 0
   while start <= 480:
       print(url.format(start))
       response = requests.get(url.format(start), headers=headers)
       html = etree.HTML(response.content.decode())
       for div in html.xpath('//div[@id="comments"]/div[contains(@class,"comment-item")]'):
           comment = div.xpath('./div[@class="comment"]/p/span/text()')[0]
           f.write(comment)
           f.write('\n')
       start += 20

得评论如下:

1638559379854168.png

2.评论的情感分析

        上面拿到的评论,简单清洗下,然后做每条评论的语义情感分析,评论情感倾向定义为:

  • positive 正向,积极的情感倾向

  • negative 负向,消极的情感倾向

import paddlehub as hub
from openpyxl import load_workbook

if __name__ == "__main__":
    # 加载senta模型
    senta = hub.Module(name="senta_bilstm")
    comments = list()
    with open("./fqly_comment.txt", "r", encoding='utf-8') as f:
        for line in f.readlines():
            line = line.strip("\n")
            if line != "":
                comments.append(line)
    # 把要测试的短文本以str格式放到这个列表里
    test_text = comments
    # 指定模型输入
    input_dict = {"text": test_text}
    # 把数据喂给senta模型的文本分类函数
    results = senta.sentiment_classify(data=input_dict)
    # 遍历分析每个短文本
    positive_nums = 0
    negative_nums = 0
    for index, text in enumerate(test_text):
        results[index]["text"] = text
    file_name = "./comment_emotion.xlsx"
    wb = load_workbook(filename=file_name)
    ws = wb.active
    fields = ["评论", "评论情感倾向", "积极情感倾向指数", "消极情感倾向指数"]
    ws.append(fields)
    for index, result in enumerate(results):
        print(results[index])
        #print('text: {},\t  predict: {}'.format(results[index]['text'][:50], results[index]['sentiment_key']))
        sentiment_key = results[index]['sentiment_key']
        if sentiment_key == "positive":
            positive_nums = positive_nums+1
            emotion = "积极"
        elif sentiment_key == "negative":
            negative_nums = negative_nums+1
            emotion = "消极"
        ws.append([results[index]['text'],  emotion, results[index]
                  ['positive_probs'], results[index]['negative_probs']])
    wb.save(filename=file_name)
    print('积极评论数: {},  消极评论数: {}'.format(positive_nums, negative_nums))

我这里还把分析结果存到excel里,方便看:

1638559954254153.png

在抓到的评论里,代码生成结果:正向积极的评论有 301 条,负向消极的评论有 253 条。

Ending

       我开始是就说了《风起洛阳》这部剧的评论有点两极分化,也是基于我的分析结果得出的,毕竟301 vs 253嘛。《风起洛阳》是2021-12-01开播,我是昨天晚上刚看了一集。如果加上我的评论的话,那这个比数就变成 301 vs 254 了。当然这部剧刚开播时间尚短,现在的评论只是基于前几集的内容,待以后的剧集更新完,到时候的评论可能更能反应用户对整部剧的看法。

        还有一个最重要的就是,“仁者见仁智者见智”,不引战!!!

        源代码以及相关资源文件都在这:https://gitee.com/shiyilin/PythonSpiders/tree/master/fqly

    


评论