NRC词典应用实例——英文文本情感分析
本文在基于NRC词典的情感分析(含多种离散情绪)——python基础上创作,原文章对中文文本进行结巴分词,然后与词典进行匹配。在作者实际使用过程中,由于需要使用到英文的原始数据,因此,将中文文本预处理部分和后续处理部分进行更改完善,以适应英文文本。
情绪和情感词典 是由加拿大国家研究委员会(简称NRC)的专家创建,因此也称为NRC词典。该词典具有广泛的应用程序开发,可以在多种环境中使用,例如情绪分析,产品营销,消费者行为,甚至是政治活动分析。
词典中包含了多种语言的词汇情感值,其中就包括英文和中文,本文将使用英文进行实例应用。
先来看一下有哪些可用的参数:
import pandas as pd
lexion_df = pd.read_excel('F:/NRC-Emotion-Lexicon/NRC-Emotion-Lexicon-v0.92/NRC-Emotion-Lexicon-v0.92-In105Languages-Nov2017Translations.xlsx')
# 读取列标题
lexion_df.columns.tolist()
#选出我们要使用的列并查看
english_df = lexion_df[['English (en)','Positive', 'Negative','Anger','Anticipation', 'Disgust', 'Fear','Joy', 'Sadness', 'Surprise', 'Trust']]
english_df.head()
然后构建每种情绪对应的词典表:
#构建每种情绪的词语列表
Positive, Negative, Anger, Anticipation, Disgust, Fear, Joy, Sadness, Surprise, Trust = [[]for i in range(10)]
for idx, row in english_df.iterrows():if row['Positive']==1:Positive.append(row['English (en)'])if row['Negative']==1:Negative.append(row['English (en)'])if row['Anger']==1:Anger.append(row['English (en)'])if row['Anticipation']==1:Anticipation.append(row['English (en)'])if row['Disgust']==1:Disgust.append(row['English (en)'])if row['Fear']==1:Fear.append(row['English (en)'])if row['Joy']==1:Joy.append(row['English (en)'])if row['Sadness']==1:Sadness.append(row['English (en)'])if row['Surprise']==1:Surprise.append(row['English (en)'])if row['Trust']==1:Trust.append(row['English (en)'])print('词语列表构建完成')
然后针对我们想分析的文本创建文本预处理函数(针对英文文本):
用到的停用词表可直接在网络上搜索,自己存储为txt文件。
import re
import csv
import string
import nltk.stem#创建停用词列表
def stopwordlist():stopwords = [line.strip() for line in open('English_stop_words.txt',encoding='UTF-8').readlines()]return stopwords# 数据清洗,可根据需求调整
def processing(text):lower = text.lower() # 将内容变小写# 去除标点# string.punctuation中包含英文的标点,我们将其放在待去除变量remove中# 函数需要三个参数,前两个表示字符的映射,我们是不需要的。remove = str.maketrans('','',string.punctuation) without_punctuation = lower.translate(remove)return without_punctuation#创建分词函数
def seg_depart(sentence):sentence_depart = sentence.split()#对英文单词进行词干提取s = nltk.stem.SnowballStemmer('english') #参数是选择的语言cleaned_text = [s.stem(ws) for ws in sentence_depart]#去除停用词 stopwords = stopwordlist() #创建一个停用词列表outstr = '' #输出结果为outstrfor word in cleaned_text: #去停用词if word not in stopwords:if word != '\t':outstr += wordoutstr += " "return outstr
然后定义以下函数对单个句子进行情感分析:
#计算句子的各种情感词汇数量#针对英文的以下修改
import timedef emotion_caculate(text):positive, negative, anger, anticipation, disgust, fear, joy, sadness, surprise, trust =[0 for i in range(10)]line = processing(text) #数据清洗wordlist = seg_depart(line) #将句子分词并去除停用词print(wordlist)wordset=wordlist.split()wordfreq = []for word in wordset:freq = wordlist.count(word)if word in Positive:positive+=freqif word in Negative:negative+=freqif word in Anger:anger+=freqif word in Anticipation:anticipation+=freqif word in Disgust:disgust+=freqif word in Fear:fear+=freqif word in Joy:joy+=freqif word in Sadness:sadness+=freqif word in Surprise:surprise+=freqif word in Trust:trust+=freqemotion_info ={'positive': positive,'negative': negative,'anger': anger,'anticipation': anticipation,'disgust': disgust,'fear':fear,'joy':joy,'sadness':sadness,'surprise':surprise,'trust':trust,'length':len(wordlist)}score_list = list(emotion_info.values())return score_list
定义以下函数,读取excel文件并逐条进行情感分析并输出:
def text_emotion():filename='EnglishContent.xlsx' #要处理的文件所处的位置、名称senti_array=[]data=pd.read_excel(filename)for i in range(0,len(data)):text = str(data.values[i])score = emotion_caculate(text)senti_array.append(score)name = ['positive', 'negative', 'anger', 'anticipation', 'disgust', 'fear', 'joy', 'sadness', 'surprise', 'trust', 'length']result = pd.DataFrame(columns=name, data=senti_array)result.to_excel('F:/result.xlsx') #结果输出位置及文件名
最后要运行的话,直接使用方法:
text_emotion()
结果就会输出在指定位置的文件夹中了
NRC词典应用实例——英文文本情感分析相关推荐
- 英文文本情感分析textblob模块sentiment方法
[小白从小学Python.C.Java] [计算机等考+500强证书+考研] [Python-数据分析] 英文文本情感分析 textblob模块 sentiment方法 [太阳]选择题 关于下列代码说 ...
- python英文文本情感分析_sentimentpy模块进行中文文本情感分类
sentimentpy是我根据R语言的一个文本情感分析包sentiment进行开发的, 开发的初衷有: R的sentiment已经被弃坑, 没人维护 Python比R更擅长文本处理 sentiment ...
- python英文文本情感分析_舆情信息浩如烟海?看看如何用Python进行英文文本的情感分析...
市场每天都在生成海量的舆情信息,这些信息可以帮助我们识别市场情绪的转变.如果只是人工地去跟踪大量的舆论和研报显然缺乏效率.我们可以试试让机器来完成这个工作. 数据科学在数值领域中很常见,但这个不断壮大 ...
- 华为云专家带你解读文本情感分析任务
摘要:本文主要介绍了文本情感分析的主要任务,包括词级别的情感分析.句子级情感分析以及属性级情感分析等任务的介绍,同时介绍了华为云在这三个任务上的一些进展. 1 基本概念 为什么:随着移动互联网的普及, ...
- 全面解读文本情感分析任务
[摘要] 文本情感分析在社交媒体.舆情监测等领域有着广泛的应用,如商品评价正负面的分析.公司网络评价正负面的监测等.本文主要介绍了文本情感分析的主要任务,包括词级别的情感分析.句子级情感分析以及属性级 ...
- 实体词典 情感词典_基于词典的文本情感分析(附代码)
一.引言 目前中文文本情感分析主要分为三个类型,第一个是由情感词典和句法结构来做的.第二个是根据机器学习来做的(Bayes.SVM等).第三个是用深度学习的方法来做的(例如LSTM.CNN.LSTM+ ...
- NLP第12课:完全基于情感词典的文本情感分析
目前情感分析在中文自然语言处理中比较火热,很多场景下,我们都需要用到情感分析.比如,做金融产品量化交易,需要根据爬取的舆论数据来分析政策和舆论对股市或者基金期货的态度:电商交易,根据买家的评论数据,来 ...
- 让机器有温度:带你了解文本情感分析的两种模型
摘要:本篇博文从模型和算法的视角,分别介绍了基于统计方法的情感分析模型和基于深度学习的情感分析模型. 文本情感分析(Sentiment Analysis)是指利用自然语言处理和文本挖掘技术,对带有情感 ...
- python中英文文本情感分析
英文文本: from textblob import TextBlobdef getText():txt = open('comment.text','r',encoding='utf-8').rea ...
- 基于Transformer的文本情感分析编程实践(Encoder编码器-Decoder解码器框架 + Attention注意力机制 + Positional Encoding位置编码)
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) Encoder编码器-Decoder解码器框架 + Atten ...
最新文章
- 认识人和鱼的AI,能识别美人鱼吗?阿里CVPR论文试用因果推理方法解答
- 1.1.1.1校园网_还担心断网?快试试清华校园网自动连接程序
- 云效助力新金融DevOps转型——南京银行实践之路
- ThinkPHP包含文件
- 数据库高级知识——主从复制
- 【从入门到放弃-Java】并发编程-线程安全
- 动动手指头, Feed 流系统亿级规模不用愁
- [转载] java中数组的反射的探究
- flask综合整理2
- 非计算机专业计算机教学考试,论非计算机专业的计算机教学与等级考试
- 从单张图重建三维人体模型综述(六)
- IPMI 接口配置
- 智能优化算法课程设计
- 帝搜软件新功能发布:知乎关键词seo排名优化上线
- 解决执行HiveSQL时,报could not be cleaned up的错误
- word 中的背景图片(浮动图形)怎么批量删除
- 云数据库与云服务器有什么区别?
- Hanoi塔(汉诺塔/梵天塔)问题
- 免企业资质免签约支付
- App Indexing