根据豆瓣影评构建标签云图

148 阅读2分钟

原链接: juejin.cn/post/701503…

影评地址: movie.douban.com/subject/258…

跟着大佬实现的影评分析小玩意儿、根据豆瓣的影评,对电影做的好评度做分析,比较有意思,就跟着写来玩玩,也算是学习了。

效果展示

豆瓣正向评分词云图.png

豆瓣负向评分词云图.png

大概思路

image.png 数据来源于豆瓣《长津湖》影评。首先,需要根据影评的星级,将其划分为好评/中差评,分别去匹配评论中对应的词(hit_stopwords.txt可以自己去GitHub上找,好像都差不多);

def get_cut_words(content_series):
    # 读入停用词表
    stop_words = []

    with open(r"hit_stopwords.txt", 'r', encoding='utf-8') as f:
        lines = f.readlines()
        for line in lines:
            stop_words.append(line.strip())

    # 添加关键词
    my_words = ['长津湖', '志愿军']
    for i in my_words:
        jieba.add_word(i)

    #     自定义停用词
    my_stop_words = ['电影', "长津湖", "战争"]
    stop_words.extend(my_stop_words)

    # 分词
    word_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False)

    # 条件筛选
    word_num_selected = [i for i in word_num if i not in stop_words and len(i) >= 2]

    return word_num_selected

然后,利用stylecloud对筛选出来的不同的词构图。

图片设置

本文icon_name参数的模板为【fas fa-thumbs-up/fa-thumbs-down】,若要设置为其他图形,只需要改动iconname即可。

iconname并不是随便起的,必须能在fontawesome.com/license/fre… 搜到才可以。

# 绘制词云图
stylecloud.gen_stylecloud(text=' '.join(text1),
                          max_words=1000,
                          collocations=False,
                          font_path=r'bb4171.ttf',
                          icon_name='fas fa-thumbs-up',
                          size=600,
                          output_name='豆瓣正向评分词云图.png')

image.png

字体设置

至于词云的字体,把字体文件放在文件同目录下即可,字体文件百度找得到。

脚本文件如下

脚本不多,直接放这了

# main.py
import pandas as pd
import os
import jieba

file_path = os.path.join("douban.csv")

# 读取test.csv文件中的A、B列,若不设置usecols参数,默认读取全部数据。
df = pd.read_csv(open(file_path, 'r', encoding='utf-8'))
# print(df.head())

star_num = df.星评.value_counts()
star_num = star_num.sort_index()


def get_cut_words(content_series):
    # 读入停用词表
    stop_words = []

    with open(r"hit_stopwords.txt", 'r', encoding='utf-8') as f:
        lines = f.readlines()
        for line in lines:
            stop_words.append(line.strip())

    # 添加关键词
    my_words = ['长津湖', '志愿军']
    for i in my_words:
        jieba.add_word(i)

    #     自定义停用词
    my_stop_words = ['电影', "长津湖", "战争"]
    stop_words.extend(my_stop_words)

    # 分词
    word_num = jieba.lcut(content_series.str.cat(sep='。'), cut_all=False)

    # 条件筛选
    word_num_selected = [i for i in word_num if i not in stop_words and len(i) >= 2]

    return word_num_selected


text1 = get_cut_words(content_series=df[(df.星评 == '力荐') | (df.星评 == '推荐')]['评论'])
print(text1[:5])

import stylecloud
from IPython.display import Image  # 用于在jupyter lab中显示本地图片

# 绘制词云图
stylecloud.gen_stylecloud(text=' '.join(text1),
                          max_words=1000,
                          collocations=False,
                          font_path=r'bb4171.ttf',
                          icon_name='fas fa-thumbs-up',
                          size=600,
                          output_name='豆瓣正向评分词云图.png')

Image(filename='豆瓣正向评分词云图.png')

text2 = get_cut_words(content_series=df[(df.星评 == '还行') | (df.星评 == '较差')]['评论'])
print(text2[:5])

# 绘制词云图
stylecloud.gen_stylecloud(text=' '.join(text2),
                          max_words=1000,
                          collocations=False,
                          font_path=r'bb4171.ttf',
                          icon_name='fas fa-thumbs-down',
                          size=600,
                          output_name='豆瓣负向评分词云图.png')
Image(filename='豆瓣负向评分词云图.png')