赞
踩
最近要做一个某个领域某个话题的网络舆情分析工作,需要计算一段时间内采集到的网络评论数据的情感值,从而分析该话题的舆情走向。那么要达到这么目的,我们就需要完成以下工作:
一、选择情感词典
要计算文本数据的情感值,那么就需要情感词典,这里,我们使用BosonNLP 的情感词典,该词典收集了114766个情感词,每个情感词都有一个对应的情感值。
该情感词典是一个txt格式的文件,里面数据的格式为:情感词 情感值
二、准备数据
我们要分析某个话题的舆情,那就需要先采集到该话题在某段时间内的网络文本数据,该文本数据中每条数据只需要时间(具体到月日就行)和对应的文本就行。这个数据准备好后,可以放到数据库中,或者放在txt文件中。
只是为了演示过程,我这里收集了一些某易财经板块下一些评论数据,只包含文本,没有日期,并将该数据存储在了txt文件中。大致如下:
三、代码实现
1、读取情感词典,将词典数据处理成字典的形式,方便后面使用:
- sentiment_score = {}
- with open(r'C:\Users\Administrator\Desktop\BosonNLP_sentiment_score.txt',encoding='utf8') as file:
- lines = file.readlines()
- for line in lines:
- word = line.split()[0]
- score = line.split()[1]
- print(word,score)
- sentiment_score[word] = eval(score)
2、读取要处理的网络文本数据。因为我演示的数据中没有日期属性,为了演示分析一段时间内舆情走势,我要在读取网络文本数据时,进行一个划分,分为7个数据集,默认为7天的数据。
- result_score = [] #存储最后计算到的情感值
- with open(r'163coments.txt', encoding='utf8') as file:
- lines = file.readlines()
- amount = len(lines)#总数据大小
- datasetLen = (int)(amount/7) +1#将数据集划分为7份,每一份的大小为datasetLen
- score = 0
- for i in range(len(lines)):
- cut_res = jieba.__lcut(lines[i])
- for res in cut_res:
- score += sentiment_score.get(res, 0)
-
- if (i+1)% datasetLen==0 or i == len(lines)-1: #计算完一份数据集,存储一次结果
- result_score.append(score)
- score = 0
-
- print(result_score)
先定义一个列表result_score 用来存储最后计算到的这7份数据集的情感总值,然后读取评论数据,使用jieba分词工具对每一条评论进行分词,然后使用情感词典计算该评论的情感值,当处理的评论数据量为一份数据集的大小时,存储该数据集的总舆情值到result_score 中。最后处理完所有,打印出来看看。
3、将得到的结果进行一个可视化展示,用来分析一段时间内的舆情走势。这里使用到了matplotlib库,自己记得引入。
- # 设置字体,否则中文会乱码
- plt.rcParams["font.sans-serif"] = ['SimHei']
- #设置正常显示负号
- plt.rcParams['axes.unicode_minus'] = False
- dev_x = [1, 2, 3, 4, 5, 6, 7]
- dev_y = result_score
- plt.plot(dev_x, dev_y)
- plt.xlabel("时间")
- plt.ylabel("情感值")
- plt.title("网络舆情情感走势")
-
- plt.show()
注意以上代码前面两行一定要注意,否则中文和负号无法显示。
4、显示分析的结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。