# 情感极性判断
## 引言
**情感极性分析**是对带有感情色彩的主观性文本进行分析、处理、归纳和推理的过程。本次实验中,我基于python语言、pytorch深度学习框架,采用**规则方法**、**统计方法**和**深度学习方法**实现了汉语句子的情感极性判断,最终的测试正确率分别为**68.7%**,**88.7%**和**91.2%**。
## 实验一:基于规则的文本情感极性分析
### 1.1 基本原理
对语料进行情感打分,若score>0则为positive,反之为negative,其中涉及到情感词、否定词、程度副词、停用词四种词典。整体算法流程图如下图所示:
<div align=center>
<img src="assets/%E6%B5%81%E7%A8%8B%E5%9B%BE.png" alt="流程图" style="zoom:80%;" />
</div>
### 1.2 数据准备
#### 1.2.1 BosonNLP情感词典
> 词典下载链接:https://kexue.fm/usr/uploads/2017/09/1922797046.zip。 据了解,此情感词典来源于社交媒体文本,适用于处理**社交媒体**的情感分析,对于其他种类样本进行分析效果不太好。
其用例展示如下:
<img src="assets/%E7%94%A8%E4%BE%8B.jpg" alt="用例" style="zoom:80%;" />
词后面的数字表示为情感词的情感分数,正向为positive的词,负向为negative的词。
#### 1.2.2 《知网》情感分析用词语集(beta 版):
> 词典下载链接:https://download.csdn.net/download/liulangdeyuyu/5729931?utm_source=bbsseo
为了增加情感词典的泛化性,我还选取了来自《知网》统计的情感分析用词作为辅助情感词典。
#### 1.2.3 否定词词典
> 词典下载链接:https://kexue.fm/usr/uploads/2017/09/1922797046.zip
否定词可以直接将文本的内涵反转,而且还存在“否定之否定”这种叠加效果。常见的否定词如:不、没、无、非、难道 等等。
#### 1.2.4 程度副词
> 该词典来源于《知网》标注语料中的程度副词
基于规则的方法核心是对每个文本进行打分,那么分数的绝对值大小也会表示情感强烈程度。因此,对于程度副词的引入就显得尤为重要。我对每个程度副词程度值进行后处理,数据格式可参考图3。总共两列,第一列为程度副词,第二列为程度数值。规则如下:极其2,超1.8,很1.5,较1.1,稍0.7,欠0.5。这里暂定以上为初始值,后续实验将会探讨该定义对结果影响。
<img src="assets/image-20211010162259234.png" alt="image-20211010162259234" style="zoom:80%;" />
#### 1.2.5 停用词词典
> 词典参考:https://github.com/isnowfy/snownlp/blob/master/snownlp/normal/stopwords.txt
==观察到,停用词中存在很多否定词典和程度副词词典中出现的词,如:不 等,需要提前过滤掉,否则就会导致判断不准确的问题(下文的实验中将会讨论)使用如下方法进行过滤:==
```python
# ======================= 生成stopword表,需要去除一些否定词和程度词汇 =======================
stopwords = set()
fr = open('停用词.txt','r',encoding='utf-8')
for word in fr:
stopwords.add(word.strip())
# ======================= 读取否定词文件 =======================
not_word_file = open('否定词.txt','r+',encoding='utf-8')
not_word_list = not_word_file.readlines()
not_word_list = [w.strip() for w in not_word_list]
# ======================= 读取程度副词文件 =======================
degree_file = open('程度副词.txt','r+',encoding='utf-8')
degree_list = degree_file.readlines()
degree_list = [item.split(',')[0] for item in degree_list]
# ======================= 生成新的停用词表 =======================
with open('stopwords.txt','w',encoding='utf-8') as f:
for word in stopwords:
if(word not in not_word_list) and (word not in degree_list):
f.write(word+'\n')
```
==同时,读取文本时候出现编码出错,据了解由于一个是gbk格式,一个是utf-8格式,最终通过errors='ignore'解决问题==
#### 1.2.6 语料库
> 这里选用酒店评价语料,下载链接为:https://download.csdn.net/download/coverspace/10432165
>
> 其中负例样本展示如下:“预订标准间:拐角房间(为什么携程订的都是拐角间),房间很小,隔音超差,房间非常冷,空调几乎不好用,卫生间更冷,几乎没法淋浴!三个字"不满意"!”
选择该语料原因如下:
1. 语料规模为10000篇,其中所用正类负类各3000篇;
2. 数据以进行标注,可以进行accuracy等结果计算;
3. 数据结构较好,易于读取和使用。
==值得一提的是,该数据集中的字符串包含很多无效的“\n”、“\n\n”等,需要处理掉==。代码如下:
```python
# 读入数据
for j in range(0,999):
path = file_path+str(i)
path = os.path.join(path,"neg")
path = path+"/neg."+str(j)+".txt"
with open(str(path), 'r',encoding='gbk', errors='ignore') as f:
my_data = f.read() # txt中所有字符串读入data,得到的是一个list
my_data = my_data.rstrip("\n")
my_data = my_data.replace("\n\n",' ')
neg_test.append(my_data)
```
### 1.3 数据预处理
#### 1.3.1 分词并删去停用词
- jieba库
```python
#jieba分词后去除停用词
def seg_word(sentence):
seg_list = jieba.cut(sentence)
seg_result = []
for i in seg_list:
seg_result.append(i)
stopwords = set()
with open('stopwords.txt','r',encoding='utf-8') as fr:
for i in fr:
stopwords.add(i.strip())
return list(filter(lambda x :x not in stopwords,seg_result))
```
- HanLP库
> HanLP是由何晗编写的自然语言处理的第三方库,其中针对中文分词进行特殊优化处理。这里首先需要安装JAVA环境,之后利用anaconda下载安装pyhanlp第三方库之后使用。
这里参考书籍《自然语言处理入门》中的分词工具,代码如下:
```python
#Hanlp分词后去除停用词
def seg_word(sentence):
seg_list = HanLP.segment(sentence):
for term in seg_list:
seg_result.append(term.word) #抛弃分词结果中的词性
stopwords = set()
with open('stopwords.txt','r',encoding='utf-8') as fr:
for i in fr:
stopwords.add(i.strip())
return list(filter(lambda x :x not in stopwords,seg_result))
```
### 1.4 情感分数计算
#### 1.4.1 词语定位
找出文本中出现的情感词、否定词和程度副词,并进行索引和标记:
```python
#找出文本中的情感词、否定词和程度副词
def classify_words(word_list):
# 创建情感字典
sen_file = open('BosonNLP_sentiment_score.txt','r+',encoding='utf-8')
sen_list = sen_file.readlines()
sen_dict = defaultdict()
for i in sen_list:
if len(i.split(' '))==2:
sen_dict[i.split(' ')[0]] = i.split(' ')[1]
#读取否定词文件
not_word_file = open('否定词.txt','r+',encoding='utf-8')
not_word_list = not_word_file.readlines()
#读取程度副词文件
degree_file = open('程度副词.txt','r+',encoding='utf-8')
degree_list = degree_file.readlines()
degree_dict = defaultdict()
for i in degree_list:
if len(i.split(' '))==2:
degree_dict[i.split(',')[0]] = i.split(',')[1]
sen_word = dict()
not_word = dict()
degree_word = dict()
#分类
for i in range(len(word_list)):
word = word_list[i]
if word in sen_dict.keys() and word not in not_word_list and word not in degree_dict.keys():
# 找出分词结果中在情感字典中的词
sen_word[i] = sen_dict[word]
elif word in not_word_list and word not in degree_dict.keys():
# 分词结果中在否定词列表中的词
not_word[i] = -1
elif word in degree_dict.keys():
# 分词结果中在程度副词中的词
degree_word[i] = degree_dict[word]
#关闭打开的文件
sen_file.close()
not_word_file.close()
degree_file.close()
#返回分类结果
retur
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
<项目介绍> 基于规则、基于朴素贝叶斯、基于逻辑回归进行文本情感极性分析判断(酒店评论语料)Python源码+文档说明 情感极性判断 引言 情感极性分析是对带有感情色彩的主观性文本进行分析、处理、归纳和推理的过程。本次实验中,我基于python语言、pytorch深度学习框架,采用规则方法、统计方法和深度学习方法实现了汉语句子的情感极性判断,最终的测试正确率分别为 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 --------
资源推荐
资源详情
资源评论




















收起资源包目录













































































共 65 条
- 1
资源评论

- weixin_626130172024-05-12资源有很好的参考价值,总算找到了自己需要的资源啦。
- m0_642155322024-05-25资源内容详实,描述详尽,解决了我的问题,受益匪浅,学到了。

机智的程序员zero
- 粉丝: 2570
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 2019年项目管理试用期转正工作总结700字.doc
- 2019最新软件系毕业生分享自我评价模板.docx
- 2019计算机专业毕业论文开题报告.doc.doc
- 2019计算机专业毕业论文开题报告范文(C语言).doc.doc
- 2019辽宁省干部在线学习-网络安全知识读本-考试题及参考答案.doc
- 2019软件开发员工辞职报告范文参考.doc
- 2019网络安全检查总结报告3篇.doc
- 2019网络安全ppt讲义.ppt.ppt
- 2019网络工程师个人年终工作总结范文.doc
- 2019网络安全知识竞赛.doc
- 2019网络编辑工作实习总结.doc
- 2019网络工程师年终工作总结.doc
- 2019网络工程师年终工作总结范文.doc
- 2019网络培训总结:我已深深地爱上了你.doc
- 2019网络工程师年度总结.doc
- 2019网络工程师个人总结.doc
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
