BosonNLP情感词典 评论情感分析[通俗易懂]

BosonNLP情感词典 评论情感分析[通俗易懂]fromsnownlpimportSnowNLPimportpandasaspdfromcollectionsimportdefaultdictimportosimportreimportjiebaimportcodecs”’#读取评论内容的.txt文件txt=open(‘C:/Users/24224/Desktop/1.txt’,encoding=’utf-8′)text=txt.readlines()print(text)#确认读取文件成功,

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

from snownlp import SnowNLP
import pandas as pd
from collections import defaultdict
import os
import re
import jieba
import codecs
''' #读取评论内容的.txt文件 txt = open('C:/Users/24224/Desktop/1.txt',encoding='utf-8') text = txt.readlines() print(text) #确认读取文件成功,并关闭文件节省资源 print('读入成功') txt.close() #遍历每一条评论,得到每条评论是positive文本的概率,每条评论计算完成后输出ok确认执行成功 comments = [] comments_score = [] for i in text: a1 = SnowNLP(i) a2 = a1.sentiments comments.append(i) comments_score.append(a2) print('ok') #将结果数据框存为.xlsx表格,查看结果及分布 table = pd.DataFrame(comments, comments_score) print(table) table.to_excel('C:/Users/24224/Desktop/emotion_analyse.xlsx', sheet_name='result') #打分范围是[0-1],此次定义[0,0.5]为负向评论,(0.5,1]为正向评论,观察其分布。 #基于波森情感词典计算情感值 def getscore(text): df = pd.read_table(r"BosonNLP_sentiment_score\BosonNLP_sentiment_score.txt", sep=" ", names=['key', 'score']) key = df['key'].values.tolist() score = df['score'].values.tolist() # jieba分词 segs = jieba.lcut(text,cut_all = False) #返回list # 计算得分 score_list = [score[key.index(x)] for x in segs if(x in key)] return sum(score_list) #读取文件 def read_txt(filename): with open(filename,'r',encoding='utf-8')as f: txt = f.read() return txt #写入文件 def write_data(filename,data): with open(filename,'a',encoding='utf-8')as f: f.write(data) if __name__=='__main__': text = read_txt('C:/Users/24224/Desktop/1.txt') lists = text.split('\n') i = 0 for list in lists: if list != '': sentiments = round(getscore(list),2) #情感值为正数,表示积极;为负数表示消极 print(list) print("情感值:",sentiments) if sentiments > 0: print("机器标注情感倾向:积极\n") s = "机器判断情感倾向:积极\n" else: print('机器标注情感倾向:消极\n') s = "机器判断情感倾向:消极"+'\n' sentiment = '情感值:'+str(sentiments)+'\n' #文件写入 filename = 'BosonNLP情感分析结果.txt' write_data(filename,'情感分析文本:') write_data(filename,list+'\n') #写入待处理文本 write_data(filename,sentiment) #写入情感值 #write_data(filename,al_sentiment) #写入机器判断情感倾向 write_data(filename,s+'\n') #写入人工标注情感 i = i+1 '''
# 生成stopword表,需要去除一些否定词和程度词汇
stopwords = set()
fr = open('停用词.txt', 'r', encoding='utf-8')
for word in fr:
stopwords.add(word.strip())  # Python 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')
# 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))
# 找出文本中的情感词、否定词和程度副词
def classify_words(word_list):
# 读取情感词典文件
sen_file = open('BosonNLP_sentiment_score\BosonNLP_sentiment_score.txt', 'r+', encoding='utf-8')
# 获取词典文件内容
sen_list = sen_file.readlines()
# 创建情感字典
sen_dict = defaultdict()
# 读取词典每一行的内容,将其转换成字典对象,key为情感词,value为其对应的权重
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:
degree_dict[i.split(',')[0]] = i.split(',')[0]
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()
# 返回分类结果
return sen_word, not_word, degree_word
# 计算情感词的分数
def score_sentiment(sen_word, not_word, degree_word, seg_result):
# 权重初始化为1
W = 1
score = 0
# 情感词下标初始化
sentiment_index = -1
# 情感词的位置下标集合
sentiment_index_list = list(sen_word.keys())
# 遍历分词结果
for i in range(0, len(seg_result)):
# 如果是情感词
if i in sen_word.keys():
# 权重*情感词得分
score += W * float(sen_word[i])
# 情感词下标加一,获取下一个情感词的位置
sentiment_index += 1
if sentiment_index < len(sentiment_index_list) - 1:
# 判断当前的情感词与下一个情感词之间是否有程度副词或否定词
for j in range(sentiment_index_list[sentiment_index], sentiment_index_list[sentiment_index + 1]):
# 更新权重,如果有否定词,权重取反
if j in not_word.keys():
W *= -1
elif j in degree_word.keys():
W *= float(degree_word[j])
# 定位到下一个情感词
if sentiment_index < len(sentiment_index_list) - 1:
i = sentiment_index_list[sentiment_index + 1]
return score
# 计算得分
def sentiment_score(sentence):
# 1.对文档分词
seg_list = seg_word(sentence)
# 2.将分词结果转换成字典,找出情感词、否定词和程度副词
sen_word, not_word, degree_word = classify_words(seg_list)
# 3.计算得分
score = score_sentiment(sen_word, not_word, degree_word, seg_list)
return score
#读取文件
def read_txt(filename):
with open(filename,'r',encoding='utf-8')as f:
txt = f.read()
return txt
def write_data(filename,data):
with open(filename,'a',encoding='utf-8')as f:
f.write(data)
#基于波森情感词典计算情感值
text = read_txt('C:/Users/24224/Desktop/1.txt')
lists  = text.split('\n')
i = 0
for l in lists:
if l  != '':
sentiments =sentiment_score(l)
#情感值为正数,表示积极;为负数表示消极
print("情感值:",sentiments)
if sentiments > 0:
print(l)
print("机器标注情感倾向:积极\n")
s = "机器判断情感倾向:积极\n"
else:
print(l)
print('机器标注情感倾向:消极\n')
s = "机器判断情感倾向:消极"+'\n'
sentiment = '情感值:'+str(sentiments)+'\n'
#文件写入
filename = 'BosonNLP情感分析结果.txt'
write_data(filename,'情感分析文本:')
write_data(filename,l+'\n') #写入待处理文本
write_data(filename,sentiment) #写入情感值
#write_data(filename,al_sentiment) #写入机器判断情感倾向
write_data(filename,s+'\n') #写入人工标注情感
i = i+1
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/172431.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Android平台下OpenGL初步

    转自网上,网上没找到出处,只看到一些论坛中有这篇文章,组织的有点混乱,这篇文章感觉讲的挺好的。http://www.bangchui.org/read.php?tid=7572&page=1本文只关注于如何一步步实现在Android平台下运用OpenGl。 1、GLSurfaceViewGLSurfaceView是Android应用程序中实现OpenGl画图的重要组成部分。

  • com.onseven.dbvis.DbVisualizerGUI

    com.onseven.dbvis.DbVisualizerGUIcom.onseven.dbvis.DbVisualizerGUI

  • js对input框的可编辑属性设置

    js对input框的可编辑属性设置

  • 十大推送方式整理_消息推送

    十大推送方式整理_消息推送百度云推送百度云推送可谓为用户体验而生,它实现了多项创新,并通过百度各大产品线千万级连接的可用性测试,迅速成为国内第三方云推送平台的标杆。据了解,在百度云推送正式发布之前,大部分的百度产品其实都已在使用百度云推送,例如百度框、百度网盘、百度地图、百度视频,已覆盖数亿的用户规模百度的技术品牌为百度云推送的先进性、大规模并发与稳定性提供了保障。腾讯信鸽推送互联网巨无霸腾讯的产品,咱有用户优

  • 微信公众平台开发(十) 消息回复总结

    微信公众平台开发(十) 消息回复总结一、简介微信公众平台提供了三种消息回复的格式,即文本回复、音乐回复和图文回复,在这一篇文章中,我们将对这三种消息回复的格式做一下简单讲解,然后封装成函数,以供读者使用。二、思路分析对于每一个POST请

  • sqlmap报错注入

    sqlmap报错注入0x00背景学习记录一下报错型的注入,经各方整理和自己总结形成。所有的注入原理都是一样,即用户输入被拼接执行。但后台数据库执行语句产生错误并回显到页面时即可能存在报错注入。0x01概念报错型注入的利用大概有以下3种方式:复制代码1:?id=2’and(select1from(selectcount(*),concat(floor(rand(0)*2),(select(…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号