中文情感分析 - SnowNLP
情感分析(Sentiment analysis,SA),又称倾向性分析、意见抽取(Opinion extraction)、意见挖掘(Opinion mining)、情感挖掘(Sentiment mining)、主观分析(Subjectivity analysis)
情感分析是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程
情感分析的目的是为了找出说话者/作者在某些话题上或者针对一个文本两极观点的态度。这个态度或许是他或她的个人判断或是评估,也许是他当时的情感状态(就是说,作者在做出这个言论时的情绪状态),或是作者有意向的情感交流(就是作者想要读者所体验的情绪)
文本情感分析的应用非常广泛,如网络舆情风险分析,信息预测等。如通过Twitter用户情感预测股票走势,电影票房、选举结果等,均是将公众情绪与社会事件对比,发现一致性,并用于预测
首先安装SnowNLP中文情感分析库:
pip install snownlp
SnowNLP(Simplified Chinese Text Processing),是一个python语言编写的类库,可以方便的处理中文文本内容,其开发受到了TextBlob的启发
import pandas as pd import matplotlib.pyplot as plt from snownlp import SnowNLP
案例分析
- 数据载入
- 数据预处理
- 将所有数据打分
- 将分数合并会原表格
- 计算指标
df = pd.read_excel('data/饭店留言数据.xlsx') # 截取一部分 columns(comments&date) 0 这辈子最爱吃的火锅,一星期必吃一次啊!最近才知道他家还有免费鸡蛋羹………………炒鸡好吃炒鸡嫩... 2017-05-14 16:00:00 1 第N次来了,还是喜欢?……<br><br>从还没上A餐厅的楼梯开始,服务员已经在那迎宾了,然... 2017-05-10 16:00:00 2 大姨过生日,姐姐定的这家A餐厅的包间,服务真的是没得说,A餐厅的服务也是让我由衷的欣赏,很久... 2017-04-20 16:00:00 3 A餐厅的服务哪家店都一样,体贴入微。这家店是我吃过的排队最短的一家,当然也介于工作日且比较晚... 2017-04-25 16:00:00 4 因为下午要去天津站接人,然后我倩前几天就说想吃A餐厅,然后正好这有,就来这吃了。<br>来的... 2017-05-21 16:00:00 5 A餐厅是我们的定点单位,单位大聚小聚都来这,所以享受VIP待遇,来了不用等位。这的菜品新鲜,... 2017-05-05 16:00:00 # 2 df.info() # 3 def aaa(x): return SnowNLP(x).sentiments grade = df['comments'].apply(aaa) grade # 科学计数法 # 4 df['grade'] = grade df.head() # 5 # 平均分 df.grade.mean() # 中位数 df.grade.median() # 快速分布 df.grade.describe() 基础结论:中位数比平均值高很多,说明有少量异常低的评分拉低了均值
可视化
df2 = df[['date', 'grade']].set_index('date').sort_index() # 看分数分布情况,直方图最合适 df2.plot.hist() df2.plot.kde() plt.scatter(df2.index, df2['grade']) plt.boxplot( df['grade'], # 数据 showmeans = True, # 是否显示平均值,默认不显示 widths = 0.5, # 柱子宽度 vert = True, # 默认True纵向,False横向 patch_artist = True, # 是否填充颜色 boxprops = {'facecolor':'#ffff00','color':'green'}, # 箱体样式 ) plt.grid(linewidth=0.2) #以分数排序,查看打分准确率、 结论 准确率比瞎猜高,但达不到人工打分准确率 SnowNLP库的训练基准数据是基于电商销售产品训练的,对饭店留言数据的打分准确率一般 做情感分析最好用户自行实现(网站增加打分功能,用户自行打分)