python 情感分析实例_基于Python的情感分析案例

2023-11-15

**情感分析 **又称为倾向性分析和意见挖掘 它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程 其中情感分析还可以细分为情感极性 倾向 分析 情感程度分析 主客观分析等。 情感极性分析的目的是对文本进行褒义、贬义、中性的判

**情感分析:**又称为倾向性分析和意见挖掘,它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程,其中情感分析还可以细分为情感极性(倾向)分析,情感程度分析,主客观分析等。

情感极性分析的目的是对文本进行褒义、贬义、中性的判断。在大多应用场景下,只分为两类。例如对于“喜爱”和“厌恶”这两个词,就属于不同的情感倾向。

**背景交代:**爬虫京东商城某一品牌红酒下所有评论,区分好评和差评,提取特征词,用以区分新的评论【出现品牌名称可以忽视,本文章不涉及打广告哦 o(╯□╰)o】。

示例1(好评)

9457d4795c0ec011be51809740a14fc6.png

示例2(差评)

7e47fea25af1191d1c2012f91f2bdc77.png

读取文本文件

def text():

f1 = open('E:/工作文件/情感分析案例1/good.txt','r',encoding='utf-8')

f2 = open('E:/工作文件/情感分析案例1/bad.txt','r',encoding='utf-8')

line1 = f1.readline()

line2 = f2.readline()

str = ''

while line1:

str += line1

line1 = f1.readline()

while line2:

str += line2

line2 = f2.readline()

f1.close()

f2.close()

return str

把单个词作为特征

def bag_of_words(words):

return dict([(word,True) for word in words])

print(bag_of_words(text()))

604606bb65c10c98d93d8c602bc2fd96.png

import nltk

from nltk.collocations import BigramCollocationFinder

from nltk.metrics import BigramAssocMeasures

把双个词作为特征,并使用卡方统计的方法,选择排名前1000的双词

def bigram(words,score_fn=BigramAssocMeasures.chi_sq,n=1000):

bigram_finder=BigramCollocationFinder.from_words(words) #把文本变成双词搭配的形式

bigrams = bigram_finder.nbest(score_fn,n) #使用卡方统计的方法,选择排名前1000的双词

newBigrams = [u+v for (u,v) in bigrams]

return bag_of_words(newBigrams)

print(bigram(text(),score_fn=BigramAssocMeasures.chi_sq,n=1000))

36fbf0bda376eb498b2e414606e8f805.png

把单个词和双个词一起作为特征

def bigram_words(words,score_fn=BigramAssocMeasures.chi_sq,n=1000):

bigram_finder=BigramCollocationFinder.from_words(words)

bigrams = bigram_finder.nbest(score_fn,n)

newBigrams = [u+v for (u,v) in bigrams]

a = bag_of_words(words)

b = bag_of_words(newBigrams)

a.update(b) #把字典b合并到字典a中

return a

print(bigram_words(text(),score_fn=BigramAssocMeasures.chi_sq,n=1000))

78a47742e28b600a600abf1ec3622f2a.png

结巴分词工具进行分词及词性标注

三种分词模式 :

A、精确模式:试图将句子最精确地切开,适合文本分析。默认是精确模式。

B、全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义

C、搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词

注:当指定jieba.cut的参数HMM=True时,就有了新词发现的能力。

import jieba

def read_file(filename):

stop = [line.strip() for line in open('E:/工作文件/情感分析案例1/stop.txt','r',encoding='utf-8').readlines()] #停用词

f = open(filename,'r',encoding='utf-8')

line = f.readline()

str = []

while line:

s = line.split('\t')

fenci = jieba.cut(s[0],cut_all=False) #False默认值:精准模式

str.append(list(set(fenci)-set(stop)))

line = f.readline()

return str

安装nltk,pip3 install nltk

from nltk.probability import FreqDist,ConditionalFreqDist

from nltk.metrics import BigramAssocMeasures

获取信息量最高(前number个)的特征(卡方统计)

def jieba_feature(number):

posWords = []

negWords = []

for items in read_file('E:/工作文件/情感分析案例1/good.txt'):#把集合的集合变成集合

for item in items:

posWords.append(item)

for items in read_file('E:/工作文件/情感分析案例1/bad.txt'):

for item in items:

negWords.append(item)

word_fd = FreqDist() #可统计所有词的词频

cond_word_fd = ConditionalFreqDist() #可统计积极文本中的词频和消极文本中的词频

for word in posWords:

word_fd[word] += 1

cond_word_fd['pos'][word] += 1

for word in negWords:

word_fd[word] += 1

cond_word_fd['neg'][word] += 1

pos_word_count = cond_word_fd['pos'].N() #积极词的数量

neg_word_count = cond_word_fd['neg'].N() #消极词的数量

total_word_count = pos_word_count + neg_word_count

word_scores = {}#包括了每个词和这个词的信息量

for word, freq in word_fd.items():

pos_score = BigramAssocMeasures.chi_sq(cond_word_fd['pos'][word], (freq, pos_word_count), total_word_count) #计算积极词的卡方统计量,这里也可以计算互信息等其它统计量

neg_score = BigramAssocMeasures.chi_sq(cond_word_fd['neg'][word], (freq, neg_word_count), total_word_count)

word_scores[word] = pos_score + neg_score #一个词的信息量等于积极卡方统计量加上消极卡方统计量

best_vals = sorted(word_scores.items(), key=lambda item:item[1], reverse=True)[:number] #把词按信息量倒序排序。number是特征的维度,是可以不断调整直至最优的

best_words = set([w for w,s in best_vals])

return dict([(word, True) for word in best_words])

调整设置,分别从四种特征选取方式开展并比较效果

def build_features():

#feature = bag_of_words(text())#第一种:单个词

#feature = bigram(text(),score_fn=BigramAssocMeasures.chi_sq,n=500)#第二种:双词

#feature = bigram_words(text(),score_fn=BigramAssocMeasures.chi_sq,n=500)#第三种:单个词和双个词

feature = jieba_feature(300)#第四种:结巴分词

posFeatures = []

for items in read_file('E:/工作文件/情感分析案例1/good.txt'):

a = {}

for item in items:

if item in feature.keys():

a[item]='True'

posWords = [a,'pos'] #为积极文本赋予"pos"

posFeatures.append(posWords)

negFeatures = []

for items in read_file('E:/工作文件/情感分析案例1/bad.txt'):

a = {}

for item in items:

if item in feature.keys():

a[item]='True'

negWords = [a,'neg'] #为消极文本赋予"neg"

negFeatures.append(negWords)

return posFeatures,negFeatures

获得训练数据

posFeatures,negFeatures = build_features()

from random import shuffle

shuffle(posFeatures)

shuffle(negFeatures) #把文本的排列随机化

train = posFeatures[300:]+negFeatures[300:]#训练集(70%)

test = posFeatures[:300]+negFeatures[:300]#验证集(30%)

data,tag = zip(*test)#分离测试集合的数据和标签,便于验证和测试

def score(classifier):

classifier = SklearnClassifier(classifier)

classifier.train(train) #训练分类器

pred = classifier.classify_many(data) #给出预测的标签

n = 0

s = len(pred)

for i in range(0,s):

if pred[i]==tag[i]:

n = n+1

return n/s #分类器准确度

这里需要安装几个模块:scipy、numpy、sklearn

scipy及numpy模块需要访问http://www.lfd.uci.edu/~gohlke/pythonlibs,找到scipy、numpy,下载对应版本的whl

import sklearn

from nltk.classify.scikitlearn import SklearnClassifier

from sklearn.svm import SVC, LinearSVC, NuSVC

from sklearn.naive_bayes import MultinomialNB, BernoulliNB

from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score

print('BernoulliNB`s accuracy is %f' %score(BernoulliNB()))

print('MultinomiaNB`s accuracy is %f' %score(MultinomialNB()))

print('LogisticRegression`s accuracy is %f' %score(LogisticRegression()))

print('SVC`s accuracy is %f' %score(SVC()))

print('LinearSVC`s accuracy is %f' %score(LinearSVC()))

print('NuSVC`s accuracy is %f' %score(NuSVC()))

检测结果输出1(单个词:每个字为特征)

b42389203cbc038199e10f521c2052bf.png

检测结果输出2(词[俩字]:2个字为特征,使用卡方统计选取前n个信息量大的作为特征)

6fbc733a8d4159e6500c050d53932a2d.png

检测结果输出3(单个词和双词:把前面2种特征合并之后的特征)

06489beee4765accacdec8d22b886514.png

检测结果输出4(结巴分词:用结巴分词外加卡方统计选取前n个信息量大的作为特征)

2199a9e8508446fdc6386fbb7afb5e7d.png

对比四种特征选取方式可以看出,单字 - 词 - 单字+词 - 结巴分词,效果是越来越好的。

以上信息来源于网络,如有侵权,请联系站长删除。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 情感分析实例_基于Python的情感分析案例 的相关文章

  • 【数据库原理选择题1-4章】

    1 1 数据库系统概述 1 1 DB DBMS 和DBS 三者之间的关系是 A DBMS包括DB和DBS B DB 包括DBMS和DBS C 不能相互包括 D DBS包括DB和DBMS 正确答案 D 2 位于用户和操作系统之间的一层数据管理
  • VS2017 登录账户时,反复让输入密码,而一直无法登陆。

    问题描述 VS2017 登录账户时 反复让输入密码 而一直无法登陆成功 最后显示无法刷新此账户凭据 解决办法 在排除是自己账户或者网络有问题后 通过清理用户数据解决问题 具体步骤如下 使用管理员权限打开命令终端 转到VS安装目录下的 Com
  • torch中的model.eval()、model.train()详解

    个人简介 深度学习图像领域工作者 工作总结链接 https blog csdn net qq 28949847 article details 128552785 链接中主要是个人工作的总结 每个链接都是一些常用demo 代码直接复制运行即
  • 欧几里得距离(欧式距离)

    文章目录 一 定义 二 公式 一 定义 欧几里得度量 欧氏距离 Euclidean Metric Euclidean Distance 指在m维空间中两个点之间的真实距离 或者向量的自然长度 即该点到原点的距离 比如 在二维和三维空间中的欧
  • 液滴/液膜蒸发过程—in文件模拟-后处理分析-Ovito/Python绘图

    关注 M r m a t e r i a l color Violet rm Mr material Mr material
  • FDR计算

    FDR计算 FDR的计算很简单 我折腾了一上午主要是因为遇到了以下几个问题 问题 FDR是什么 有什么用 怎么计算 我把几个模型的P值都合并成一个表了 所以每次运算FDR时 我需挑选特定的对象 我有多个模型 所以我想着要如何构建循环 FDR
  • 机器学习-人为设置函数方法和神经网络方法解决智能五子棋问题

    2 智能决策 2 1 博弈树模型算法 2 1 1 全局估算函数 此次项目中评估函数有两种 1 人为设定函数方法 更具人的经验 对一些特定的棋形在棋盘上进行检索 并且计数 最后赋予相应权值求和得到对棋盘的评价值 典型的棋形有 活一 活二 活三
  • 集成学习-理论概述

    1 集成学习概述 集成学习 ensemble learning 本身不是一个单独的机器学习算法 而是通过构建并结合多个机器学习器来完成学习任务 集成学习的特点 集成方法是一种将几种机器学习技术组合成一个预测模型的元算法 以减小方差 bagg
  • IDEA中如何导入module并成功运行

    在写Java项目的时候我们通常需要导入module 需要注意的是导入过程需要以下两大步骤 否则会出现无法运行的情况 以下我以导入 service edu 模块为例 一 将module文件拷贝到工程目录下 直接将需要导入的module文件 s
  • 李宏毅深度学习——优化方法

    记录了关于梯度的历史 SGD SGD with Momentum 防止gradient为0 SGD停止不动了 sgd with momentum 前面的移动会累加到下一步 sgd with momentum 前面的移动会累加到下一步 所以小
  • 【07节】Python3+Selenium4自动化 unittest 测试框架详解

    文章目录 1 unittest 框架介绍 2 创建单元测试步骤 3 unittest 模块介绍 3 1 TestCase 类 3 1 1 TestCase 类常用方法 3 1 2 TestCase 类其他方法 3 2 setUp 与 tea
  • 【cpu or gpu】【tensorflow】怎么查看用的是CPU还是GPU

    方法1 from tensorflow python client import device lib print device lib list local devices 参考博客 可用设备为 name device CPU 0 dev
  • 设计模式之桥接模式

    文章目录 一 手机操作问题 1 传统方案解决手机操作问题 2 传统方案解决手机操作问题分析 二 桥接模式 1 基本介绍 2 原理类图 三 桥接模式解决手机操作的问题 1 类图 2 代码 2 抽象类 抽象类子类 行为类接口 接口实现类 客户端
  • 关于api-ms-win-crt-runtimel1-1-0.dll缺失问题的解决方法

    1 问题描述 在win7系统中安装一个截图软件Snipaste时 出现api ms win crt runtimel1 1 0 dll缺失问题 如下图 2 问题原因 在网上查找资料 发现说是在C window system 或者C wind
  • 八十六.快速排序与归并排序(查找与排序(二))——JAVA

    查找与排序 一 查找与排序 三 查找与排序 四 一 分治法 分治法 将原问题划分成若干个规模较小而结构与原问题一致的子问题 递归地解决这些子问题 然后再合并其结果 就得到原问题的解 容易确定运行时间 是分支算法的优点之一 分治模式在每一层递
  • UE TSubclassOf

    定义 TSubclassOf
  • opencv中Mat矩阵的合并与拼接

    opencv如何将两个矩阵按行或者按列合并 在Matlab中将两个矩阵合并非常方便 按行合并 如A B C 按列合并如A B C 其实opencv有自带函数 vconcat和hconcat函数 用于矩阵的合并与图像的拼接 vconcat B
  • React中获取元素(ref获取方式)

    受控组件 在react中 input标签的部分属性受到react控制 如onChange是基于input 和change 事件进行封装 非受控组件 对于没有经历过封装的一些属性或者方法 可以通过ref去获取这个dom元素 再去获取或触发其自
  • 快速学会linux上的chrony服务

    文章目录 chrony服务 1 安装与配置 2 同步网络时间服务器 3 配置时间服务器 将本机作为服务器 4 chronyc命令 5 强制时区 chrony服务 Chrony 是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件 它

随机推荐

  • 智慧井盖监测管理系统解决方案

    一 方案概述 近年来 随着城市化的不断发展 城市地下管道设施的一步步完善 井盖作为城市基础设施中必不可少的一部分 其重要性也逐渐凸显 然而 在实际应用中 井盖监测和管理并不容易 如井盖地理位置分散 数量庞大 传统的巡检方式成本高 效率低 不
  • java定时器Timer的使用

    在JDK库中Timer类主要负责计划任务的功能 也就是在指定的时间开始执行某一个任务 Timer类的主要作用就是设置计划任务 但是封装任务的类的是TimerTask类 下面展示几个例子 在指定的日期执行一次某一任务 import java
  • C语言常用math函数

    算法笔记 第2章 fabs double x 对double型变量取绝对值 floor double x 和ceil double x 对double型变量进行向下取整和向上取整 pow double r double p 计算 r p r
  • 几种集中式管理框架比较

    最近因为项目管理上的需要 调研集中式管理工具 百度Disconf 携程Apollo 阿里ACM 三者都可以满足集中式配置 并提供监听 实时改变配置 关于3个框架的使用以及搭建请自行参考官方API文档 不再叙述 对比了3个框架的配置 如下 d
  • 精确时钟同步协议ptp/IEEE-1588v2协议-------(1)简介

    本文目录 1 从角色的角度来区分 2 从时钟类型的角度来区分 2 1 在IEEE 1588 2002中定义了普通时钟 OC ordinary clock 和边界时钟 BC boundary clock 这二种类型的时钟 2 2 在IEEE
  • 【neo4j】win10上利用neo4j-admin导入csv

    原因 我需要导入CN DBpedia到Neo4j中 包含900万 的百科实体以及6700万 的三元组关系 普通逐条插入可能速度太慢 所以要使用neo4j admin命令来进行导入 CN DBpedia原始数据直提供了txt格式的三元组数据
  • java系统增加查找算法详解

    题干 数学老师小y 想写一个成绩查询系统 包含如下指令 insert name score 向系统中插入一条信息 表示名字为name的学生的数学成绩为score find name 表示查找名字为name的学生的数学成绩 注意有些同学可能会
  • Rancher基础使用

    Rancher基础使用 安装 以下安装是在centos7 环境下 注意 生产环境建议在 Kubernetes 集群上安装 Rancher 因为在多节点集群中 Rancher Server 可以实现高可用 这种高可用配置可以提升访问下游集群的
  • 【流媒體】jrtplib—VS2010下RTP开源协议库JRTPLIB3.9.1编译

    流媒體 jrtplib VS2010下RTP开源协议库JRTPLIB3 9 1编译 SkySeraph Apr 7th 2012 Email skyseraph00 163 com 一 JRTPLIB简介 老外用C 编写的开源RTP协议库
  • matlab、C语言实现时域卷积运算

    背景 某次面试 岗位为音频算法 遇到了c语言实现卷积的编程题 当时不够精通c语言 写的程序比较垃圾 现在重新整理了一下 原理 卷积公式 matlab有自带的计算卷积的函数conv 根据公式 现编写实现卷积的函数并与自带函数做对比 关键点 假
  • 初步C++: g++: error: CreateProcess: No such file or directory

    问题 使用eclipse 环境 学习 c 出现如下错误 g error CreateProcess No such file or directory 经过百度查找 花了接近一天时间 始终找不到问题原因 今天下午出去上完 英语课回来的时候
  • 07-Java框架-SpringBoot整合MyBatis

    一 SpringBoot整合mybatis 1 1 添加依赖 创建springboot项目 添加依赖 编写启动类等 并在springboot依赖的基础上加入 mysql 和 springboot整合mybatis 的依赖 依赖对应关系参考官
  • Proxyee Down百度网盘高速下载器详细使用教程

    之前的Mac介绍毒了很多关于百度云提速的文章 但随着时间的推移 也都一一失效 今天再为大家带来一款百度云提速神器Proxyee Down 测试可以正常使用 速度也是非常的快 但不能保证所有资源下载正常 下面为大家整理详细的教程 希望大家可以
  • 更改jar包里的代码

    1 将class文件改成java文件 如果你的jar包中是包含源代码的 即包含java文件 请跳过此步 先将jar包通过winrar或者快压等解压缩软件将jar包解压缩 再通过一些专门的Java反编译工具将class文件转换为java文件
  • 如何将Android studio 的项目变成Lib工程,供项目使用

    最近公司项目比较松 在这里我优化项目时 突然想到就写一下关于项目怎么搞成lib包来给其他项目引用的过程 下面就是所有的步骤 说得很详细呢 1 先创建一个PersonLibDemo的一个Android项目 在这个项目创建一个类 方便测试在别
  • C#读写欧姆龙PLC数据omron 使用TCP/IP FINS协议

    很多自动化设备使用OMRON PLC来控制制造过程 如果有SCADA 数据系统需要获取PLC的数据 甚至控制制造过程的参数 如加热温度 切割长度等 这需要一个中间层来执行这个任务 这个类就是为这种需求而设计的 可以把它嵌入到你的应用中 让你
  • 计算机磁盘组织选项,电脑d盘怎么清理 选择常规选项然后点击磁盘清

    谈论到电脑 大家应该都了解 有人问电脑d盘如果满了怎么办 当然了 还有人想问电脑d盘满了 怎么清理 这到底怎么回事呢 事实上电脑里面的d盘怎么没有了呢 下面小编就会给大家带来电脑d盘怎么清理 下面就和大家分享一下吧 电脑d盘怎么清理 具体操
  • PageHelper.startPage的使用

    PageHelper startPage的使用 PageHelper是MyBatis的分页插件 它能够帮助我们快速且简洁的实现分页功能 传统的分页都需要我们程序员手动在sql语句里写LIMIT语句 而PageHelper这个插件能够帮助我们
  • 时序预测

    时序预测 MATLAB实现基于EMD LSTM时间序列预测 EMD分解结合LSTM长短期记忆神经网络 目录 时序预测 MATLAB实现基于EMD LSTM时间序列预测 EMD分解结合LSTM长短期记忆神经网络 效果一览 基本描述 模型描述
  • python 情感分析实例_基于Python的情感分析案例

    情感分析 又称为倾向性分析和意见挖掘 它是对带有情感色彩的主观性文本进行分析 处理 归纳和推理的过程 其中情感分析还可以细分为情感极性 倾向 分析 情感程度分析 主客观分析等 情感极性分析的目的是对文本进行褒义 贬义 中性的判 情感分析 又