情感分析与Python实践

情感分析是研究人类行为和决策中不可或缺的一部分。信念、对现实世界的印象以及所做的决策,在很大程度上,都是基于他人如何看待和评价这个世界。因此,当需要做出选择时,经常会寻求他人的意见。观点及其相关概念,如情感、评价、态度和情绪,是情感分析研究的主题。

随着网络媒体的兴起和快速发展,情感分析领域也随之迅速发展。例如,调查、论坛讨论、博客、微博、Twitter和社交网络等,因为人类历史上前所未有的,拥有大量以先进结构记录的坚定信息。自21世纪中叶以来,情感分析已成为自然语言处理中最活跃的研究领域之一。

情感分析不仅在数据挖掘、网络挖掘和文本挖掘中被广泛研究,而且由于其对商业和社会的重要性,它已经从计算机科学扩展到管理科学和社会学。最近,涉及情感分析的现代活动也蓬勃发展。许多新公司应运而生,许多大企业建立了自己的内部能力。

情感分析系统在几乎所有的商业和社会领域都找到了它们的应用。情感分析,也称为意见挖掘,是研究人们对实体如产品、服务、组织、个人、问题、事件、主题及其属性的观点、情感、评价、评估、态度和情绪的领域。它代表了一个庞大的问题空间。

情感分析在Python中的应用

Python中,有许多包可以使用不同的方法进行情感分析。在下一篇文章中,将介绍一些最受欢迎的方法和包:

Textblob

Textblob的情感分析器为给定的输入句子返回两个属性:极性是一个介于[-1,1]之间的浮点数,-1表示负面情绪,+1表示正面情绪。主观性也是一个介于[0,1]之间的浮点数。主观句子通常指的是意见、情感或判断。

from textblob import TextBlob test = TextBlob("这部电影太棒了!") print(test.sentiment)

Textblob将忽略它不熟悉的词汇,它将考虑它能够分配极性和中点的单词和表达式,以获得最终得分。

VADER

VADER使用一系列词汇特征(例如单词),这些特征根据它们的语义方向被标记为正面或负面,以计算文本情感。VADER情感返回给定输入句子为正面、负面和中性的概率。

from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer analyzer = SentimentIntensityAnalyzer() sentence = "这部电影太棒了!" vs = analyzer.polarity_scores(sentence) print("{:-<65} {}".format(sentence, str(vs)))

使用酒店评论数据集进行情感分析

为了简化流程,将使用酒店评论数据集,其中包含了客户对酒店住宿的意见。

from nltk.sentiment.vader import SentimentIntensityAnalyzer from nltk.sentiment.util import * from textblob import TextBlob from nltk import tokenize import pandas as pd df = pd.read_csv('hotel-reviews.csv') df.head() # 数据集预览 df.drop_duplicates(subset="Description", keep="first", inplace=True) df['Description'] = df['Description'].astype('str') def get_polarity(text): return TextBlob(text).sentiment.polarity df['Polarity'] = df['Description'].apply(get_polarity) # 使用Textblob生成情感极性和类型 df['Sentiment_Type']='' df.loc[df.Polarity>0,'Sentiment_Type']='POSITIVE' df.loc[df.Polarity==0,'Sentiment_Type']='NEUTRAL' df.loc[df.Polarity<0,'Sentiment_Type']='NEGATIVE' # Textblob情感分析图表 df.Sentiment_Type.value_counts().plot(kind='bar', title="Sentiment Analysis with Textblob")

使用Textblob后,为每个评论/描述获得了极性和情感类型。

import nltk nltk.download('vader_lexicon') from nltk.sentiment.vader import SentimentIntensityAnalyzer sid = SentimentIntensityAnalyzer() # 使用VADER生成情感极性和类型 df['scores'] = df['Description'].apply(lambda Description: sid.polarity_scores(Description)) df['compound'] = df['scores'].apply(lambda score_dict: score_dict['compound']) df['sentiment_type']='' df.loc[df.compound>0,'sentiment_type']='POSITIVE' df.loc[df.compound==0,'sentiment_type']='NEUTRAL' df.loc[df.compound<0,'sentiment_type']='NEGATIVE' # VADER情感分析图表 df.sentiment_type.value_counts().plot(kind='bar', title="Sentiment Analysis with VADER")

使用VADER后,为每个评论/描述获得了复合和情感类型。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485