R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据
  MFqKcJmbshKy 2023年11月30日 21 0

情感分析,就是根据一段文本,分析其表达情感的技术。比较简单的情感分析,能够辨别文本内容是积极的还是消极的(褒义/贬义);比较复杂的情感分析,能够知道这些文字是否流露出恐惧、生气、狂喜等细致入微的情感。此外,情感的二元特性还可以表达为是否含有较大的感情波动。也就是说,狂喜和暴怒都属于感情波动,而宠辱不惊则属于稳定的情感状态。

研究目的

本文基于R语言的自然语言处理技术,针对企业的财务信息、产品质量等文本信息,帮助客户对企业和产品进行情感分析和情感分类,并将这些数据可视化呈现。本文选择了A股上市公司相关数据,通过构建R语言的文本情感分析模型对文本情感进行分析,并以此为基础对企业进行情感分类。   附件说明:其中基础词典是要通过文本挖掘的结果扩展的词典了,也是研究的主要目的(分词的时候可以用到);

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_情感分析

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_数据_02

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_情感分析_03

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_数据_04

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_数据_05

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_情感分析_06

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_数据_07

语料库资源是要进行文本挖掘的数据源。

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_文本挖掘_08

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_数据_09

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_数据_10

研究的目的就是在文本分析结果的基础上扩展用户词典,这些需要在文本挖掘的基础上进行扩展。其中语料库一共是10个文件,需要的是一个文件出一个结果。最后是要对比这10个文件的。还有就是语料库是pdf格式。

出现的结果应该是类似这种的:

 

中文财务关键词

05年

06年

07年

08年

负面词

184

107

 

 

正面词

48

66

 

 

不确定词

22

19

 

 

诉权词

57

31

 

读取词库数据

 

 

Litigious=read.table("Litigious Words.txt")  
Strong=read.table("Modal Words Strong.txt")  
Weak=read.table("Modal Words Weak .txt")  
Positive=read.table("Positive Words.txt")  
Uncertainty=read.table("Uncertainty Words.txt")  
Negative=read.table("Negative Words .txt")

文本清理和分词

 

 

qrxdata=gsub("\n","",qrxdata)  
words= lapply(X=qrxdata, FUN=segmentCN) ;

初始化统计结果

 

 

x=words  
pwords=positive  
nwords=negative  
Litigious=Litigious  
Strong=Strong  
Weak=Weak  
Uncertainty=Uncertainty  
  
  
npwords=0  
nnwords=0  
nLitigious=0  
nStrong=0  
nWeak=0  
nUncertainty=0
emotionType <-numeric(0)  
xLen <-length(x)  
emotionType[1:xLen]<- 0  
index <- 1

词法分析

词法分析。它的原理非常简单,事前需要定义一个情感词典。比如“喜欢”这个词我们定义为1分。那么“我喜欢你”这句话,“我”和“你”都是中性词,均为0分,“喜欢”为1分,这句话的总分就是1分。“我喜欢你,但讨厌他”,这样一句话中有“讨厌”这个词,在情感词典中分数为“-1”,那么整句话的得分就是0。这样,我们就可以对每一个文本进行分词,然后使用内连接(inner join)来提取其中的情感词语,并根据情感词语的得分,来评估这段文本的情感得分。

 

 

for(index in 1: xLen){  
  x[[index]]=unique(x[[index]])  
  yLen <-length(x[[index]])  
  index2 <- 1  
  for(index2 in 1 :yLen){  
    if(length(pwords[pwords==x[[index]][index2]]) >= 1){  
      i=pwords[pwords==x[[index]][index2]]  
      npwords=npwords+length(pwords[pwords==x[[index]][index2]])  
      if(length(i)==0)next;  
      duanluo=substr(qrxdata[index],regexpr(i,qrxdata[index])[1]-20,regexpr(i,qrxdata[index])[1]+20)  
      if(regexpr(i,duanluo)[1]<0 )next;  
      cat(studentID,"\t",i," \t","DOC",index,"\t ","pos"," \t",duanluo," \t",length(pwords[pwords==x[[index]][index2]])/length(x[[index]])," \

按年份和词性分类汇总成表格

 

 

1=data.frame("正面词"=npwords,"负面词"=nnwords,"不确定词"=nUncertainty,"诉权词"=nLitigious,  
                "强语气词"=nStrong,"弱语气词"=nWeak)  
  


 =rbind(,1)

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_数据_11

ggplot可视化

将每个文档的词性输出,并按照词性和年份绘制变化趋势:

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_数据_12

R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_文本挖掘_13


R语言自然语言处理NLP:情感分析上市公司文本信息知识发现可视化|附代码数据_数据_14



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月30日 0

暂无评论

推荐阅读
MFqKcJmbshKy