1. python SnowNLP情感分析实践与优化总结
由于语料缺乏,前期若使用到情感分析,建议暂时使用SnowNLP(此模块主要使用淘宝评论语料)做情感挖掘,但不仅仅为单纯调用,需要优化,下面是一些实践思考:
可在此基础上优化,比如文本需要特别处理,除了平常的去停用词外,还可以需要对输入的文本结合词性等进行处理。
下面是一些常识:
一)无情感的词语(如去停用词,去掉语气词,无词性标签的词语)
二)对于文本过长,则可以考虑提取关键词或抽取文本摘要后再提取关键词
对于后者实践结果差异明显:
以"发布了头条文章: 《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显 "为例子, 显然该文本为“积极****”文本。
1)s = SnowNLP("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")
得分为0.5,明显不符合
2)s = SnowNLP(“ ”.join(jieba.analyse.textrank("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")))
而对于文本特别长的,则可以先抽取摘要,再对摘要提取关键词。
这主要由于此SnowNLP主要用贝叶斯机器学习方法进行训练文本,机器学习在语料覆盖上不够,特征上工程处理不当会减分,也没考虑语义等。
为何要考虑语义层面:
以“ 苏宁易购,是谁给你们下架OV的勇气****” 中的“ 下架”其实才是中心词(为表达愤怒的文本),但“ 勇气 ”为下架的宾语(其为积极的文本),此句应该结果小于0.5,但实际为0.88,去掉“苏宁易购”则为0.6>
2. 如何用Python做情感分析
可以使用snownlp包,也可以用nltk 和 scikit-learn 结合,或者自己写算法实现。
简单话就是情感词典的匹配,想提高效果的需要考虑特征之间的搭配,语法顺序等,可以查询搜索相关的入门例子和算法详细了解。
3. 用python找文献,并从文本中分析情绪,做一个数据分析
到你的系统“终端”(macOS, Linux)或者“命令提示符”(Windows)下,进入我们的工作目录demo,执行以下命令。
pip install snownlppip install -U textblobpython -m textblob.download_corpora
好了,至此你的情感分析运行环境已经配置完毕。
在终端或者命令提示符下键入:
jupyter notebook
你会看到目录里之前的那些文件,忽略他们就好。
4. python数据挖掘——文本分析
作者 | zhouyue65
来源 | 君泉计量
文本挖掘:从大量文本数据中抽取出有价值的知识,并且利用这些知识重新组织信息的过程。
一、语料库(Corpus)
语料库是我们要分析的所有文档的集合。
二、中文分词
2.1 概念:
中文分词(Chinese Word Segmentation):将一个汉字序列切分成一个一个单独的词。
eg:我的家乡是广东省湛江市-->我/的/家乡/是/广东省/湛江市
停用词(Stop Words):
数据处理时,需要过滤掉某些字或词
√泛滥的词,如web、网站等。
√语气助词、副词、介词、连接词等,如 的,地,得;
2.2 安装Jieba分词包:
最简单的方法是用CMD直接安装:输入pip install jieba,但是我的电脑上好像不行。
后来在这里:https://pypi.org/project/jieba/#files下载了jieba0.39解压缩后 放在Python36Libsite-packages里面,然后在用cmd,pip install jieba 就下载成功了,不知道是是什么原因。
然后我再anaconda 环境下也安装了jieba,先在Anaconda3Lib这个目录下将jieba0.39的解压缩文件放在里面,然后在Anaconda propt下输入 pip install jieba,如下图:
2.3 代码实战:
jieba最主要的方法是cut方法:
jieba.cut方法接受两个输入参数:
1) 第一个参数为需要分词的字符串
2)cut_all参数用来控制是否采用全模式
jieba.cut_for_search方法接受一个参数:需要分词的字符串,该方法适合用于搜索引擎构建倒排索引的分词,粒度比较细
注意:待分词的字符串可以是gbk字符串、utf-8字符串或者unicode
jieba.cut以及jieba.cut_for_search返回的结构都是一个可迭代的generator,可以使用for循环来获得分词后得到的每一个词语(unicode),也可以用list(jieba.cut(...))转化为list代码示例( 分词 )
输出结果为: 我 爱
Python
工信处
女干事
每月 经过 下属 科室 都 要 亲口
交代
24 口 交换机 等 技术性 器件 的 安装
工作
分词功能用于专业的场景:
会出现真武七截阵和天罡北斗阵被分成几个词。为了改善这个现象,我们用导入词库的方法。
但是,如果需要导入的单词很多,jieba.add_word()这样的添加词库的方法就不高效了。
我们可以用jieba.load_userdict(‘D:PDM2.2金庸武功招式.txt’)方法一次性导入整个词库,txt文件中为每行一个特定的词。
2.3.1 对大量文章进行分词
先搭建语料库:
分词后我们需要对信息处理,就是这个分词来源于哪个文章。
四、词频统计
3.1词频(Term Frequency):
某个词在该文档中出现的次数。
3.2利用Python进行词频统计
3.2.1 移除停用词的另一种方法,加if判断
代码中用到的一些常用方法:
分组统计:
判断一个数据框中的某一列的值是否包含一个数组中的任意一个值:
取反:(对布尔值)
四、词云绘制
词云(Word Cloud):是对文本中词频较高的分词,给与视觉上的突出,形成“关键词渲染”,从而国旅掉大量的文本信息,使浏览者一眼扫过就可以领略文本的主旨。
4.1 安装词云工具包
这个地址:https://www.lfd.uci.e/~gohlke/pythonlibs/ ,可以搜到基本上所有的Python库,进去根据自己的系统和Python的版本进行下载即可。
在python下安装很方便,在anaconda下安装费了点劲,最终将词云的文件放在C:UsersAdministrator 这个目录下才安装成功。
五、美化词云(词云放入某图片形象中)
六、关键词提取
结果如下:
七、关键词提取实现
词频(Term Frequency):指的是某一个给定的词在该文档中出现的次数。
计算公式: TF = 该次在文档中出现的次数
逆文档频率(Inverse Document Frequency):IDF就是每个词的权重,它的大小与一个词的常见程度成反比
计算公式:IDF = log(文档总数/(包含该词的文档数 - 1))
TF-IDF(Term Frequency-Inverse Document Frequency):权衡某个分词是否关键词的指标,该值越大,是关键词的可能性就越大。
计算公式:TF - IDF = TF * IDF
7.1文档向量化
7.2代码实战
5. 怎样用python处理文本情感分析
Python 有良好的程序包可以进行情感分类,那就是Python 自然语言处理包,Natural Language Toolkit ,简称NLTK 。NLTK 当然不只是处理情感分析,NLTK 有着整套自然语言处理的工具,从分词到实体识别,从情感分类到句法分析,完整而丰富,功能强大。
6. 怎么利用python或R分析我的微博或者朋友圈
一. 你在浏览微博的时候,受到哪些用户的影响。
1. 抓取你微博的关注列表,通过一定的条件筛选一部分用户,继续抓他们的关注列表,这样抓两到三层就行了,不然数据太大了。
2. 对抓取的用户进行影响力建模,例如,用户最近两个月的微博的转发评论和点赞数据
3. 最后分析出哪些用户对你的影响最大
二. 基于地理位置的分析
1. 抓取以某个城市为发微博的地理位置的微博数据,并且抓取发微博的用户的相关信息
2. 对数据清洗,通过用户资料筛选出是否土着居民,还是旅游出差之类的数据
3. 对数据分析,通过发微博的时间啊,某个地点发微博的次数啊,发微博出现最多的关键词
这些应该能得到一些有意思的数据
三. 自然语言处理
微博的大量的文本数据可以做自然语言处理,情感分析之类的很多研究
四. 热点事件追踪
1. 通过关键词的搜索,跟踪热点事件
2. 很多热点事情都是某个微博开始发酵的,可以抓取转发路径,找出哪些是重要的转发节点,
抓取评论内容,看看网友对这件事情的态度。
3. 监控微博博主的粉丝增加数量的变化
五. 计算机视觉相关研究
1. 抓取微博出现的图片,做计算视觉相关的研究
2. 抓取微博用户的头像,做人脸识别之类的,应该很有意思。
六. 个人微博数据分析
1. 发微博时间
2. 微博出现的关键词
3. 你点过哪些赞,评论过哪些微博。
4. 和哪些人发过私信,这些都可以研究,关键是找到合适的模型
7. 很高兴认识你,也很想帮我揪揪痧,不知能实现愿望
名大一学生 这是我的第一章博客
我其实不太清楚“博客”是用来做什么的,但是现在我想用来发表一些我的“琐事杂事”
我的状态
我在迷茫的状态中渐渐的将自己给拉出来,我有了明确的目标,现在我便开始要养成我的习惯。
我想将自己更加透彻的剖析下,不介意各位谁看到了我的这篇博客,嗯,因为可能我的博客里面写了一些“极其弟弟”的行为和语言。
具体实现步骤如下:
将自己的日常发表 ,这样的行为虽然是会“流水”可是在写日记的话,我们会在写的过程了反思;
学习小结 不论是自学的还是专业的;
以上待补充 ;
很高兴认识你 ?
–16:40 --2018.2.17 --长沙
推荐10个堪称神器的 Java 学习网站
Java学习网站,有了这些,成为大牛不在话下
APP打开
奥运英语[5] 很高兴再次见到你 Good to see you again.
http://www.eol.cn/olympic_study_5563/20070228/t20070228_220259.shtml 第5句GREETINGS: Good to see you again. 问候语: 很高兴再次见到你。A Hi, Paul. It’s good to see you again.A 嗨,保罗,很高兴再次见
APP打开
程序员一般通过什么途径接私活?
点击蓝色“Creator星球游戏开发社区”关注我哟加个“星标”,一起快乐成长二哥,你好,我想知道一般程序猿都如何接私活,我也想接,能告诉我一些方法吗?上面是一个读者“烦不烦”问我的一个问题。其实不止是“烦不烦”,还有很多读者问过我类似这样的问题。我接的私活不算多,挣到的钱也没有多少,加起来不到 20W。说实话,这个数目说出来我是有点心虚的,毕竟太少了,大家轻喷。但我想,恰好配得上“一般程序员”这个...
APP打开
看完让你彻底搞懂Websocket原理
偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对websocket的认识深刻有木有。所以转到我博客里,分享一下。比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享。废话这么多了,最后再赞一个~ 一、websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久
APP打开
你好,很高兴认识你_默的博客-CSDN博客
请你保护好自己吧 偶然间从你的全世界路过 我永远也无法让你带我去 你永远也无法跟我走 十四亿分之一 很高兴认识你 ——2020年8月6日凌晨点...
你好_bigha7的专栏-CSDN博客
你好 很高兴认识你 你好,很高兴认识你我是“假·玉米” 现在在长沙 目前是一名大一学生 这是我的第一章博客我其实不太清楚“博客”是用来做什么的,但是现在我...
Python3从零开始搭建一个语音对话机器人
从零开始搭建一个语音对话机器人 目录 01-初心缘由 02-准备工作 03-语音机器人的搭建思路 04-语音生成音频文件 05-音频文件转文字STT 06-与图灵机器人对话 07-文字转语音 08-语音对话机器人的完整代码 09-结束语 10-有问必答 01-初心缘由 最近在研究语音识别方向,看了很多的语音识别的资料和文章,了解了一下语音识别的前世今生,其...
APP打开
zuiqingchun2
第七十四章 先从接吻开始 她听完就掐了我胳膊下,脸微微红着说:干啥啊问这个,真不要脸,我说我咋不要脸了,那不是你昨天主动告诉我的啊? 她这时候就一副不认账的样子不停的跟我说:没有没有没有......我心想人家本来也就没跟我说,是我从高帅那知道的,便也跟她说得了,没就没吧,我现在问你,是不是一个大,一个小? 其实我说这些话也不是没目的的,以前没有对林一妹产生什么歪想法,那是因为那时候主要思考的
APP打开
Hi,runloop 交个朋友吧 - weixin_34400525的博客 - CSDN博客
runloop :你好,很高兴认识你! developer:我先自我介绍一下,我叫iOS Developer,你呢? runloop :我叫runloop,你的有些同伴叫我跑圈,我觉得叫我循环运行比较...
初次见面,你好_weixin_30603633的博客-CSDN博客
虽然不知道是在对谁说话,初次见面,你好,我是墨雨笙...临近毕业的时候又机缘巧合听到了很厉害的学长的介绍...今天你最大!奉上我的爱!!内容是程序员表白的一种...
如何优雅地打印一个Java对象?
你好呀,我是沉默王二,一个和黄家驹一样身高,和刘德华一样颜值的程序员。虽然已经写了十多年的 Java 代码,但仍然觉得自己是个菜鸟(请允许我惭愧一下)。 在一个月黑风高的夜晚,我思前想后,觉得再也不能这么蹉跎下去了。于是痛下决心,准备通过输出的方式倒逼输入,以此来修炼自己的内功,从而进阶成为一名真正意义上的大神。与此同时,希望这些文章能够帮助到更多的读者,让大家在学习的路上不再寂寞、空虚和冷。 ...
APP打开
你好,放大器
详细讲解了运放的分类和使用方法
APP打开
很高兴认识大家(开通技术博客的理由) - weixin_30289831的博客...
我很高兴能够在程序员的网上精神家园开通博客,学习写作技术博文,并与大家有其他人生话题的互动和交流。 受到新媒体的影响如微信微博等社交网络软件的盛行,我已经有...
终于加入了CSDN,高兴! - skipjacks的专栏 - CSDN博客
今天加入了JAVAEYE,很开心哈。可以在这里找到自己需要的东西,看看别人的博客,交到很多同行的朋友,呵呵!!!... 博文 来自: 小孩儿 你好 很高兴认识你 阅读数 ...
NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分)
NLP之情感分析:基于python编程(jieba库)实现中文文本情感分析(得到的是情感评分) 输出结果 1、测试对象 data1= '今天上海的天气真好!我的心情非常高兴!如果去旅游的话我会非常兴奋!和你一起去旅游我会更加幸福!' data2= '今天上海天气真差,非常讨厌下雨,把我冻坏了,心情太不高兴了,不高兴,我真的很生气!' data3= '美国华裔科学家,祖籍江苏扬州市高邮县,...
APP打开
Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT,博主亲自验证有效
Emulator: PANIC: Cannot find AVD system path. Please define ANDROID_SDK_ROOT 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除...
APP打开
只为交运维道友_huangyuandong1314的博客-CSDN博客
你好!很高兴认识你... 面向对象编程,你知道Java有哪些创建对象的方式吗? Java有哪些创建对象的方式?1、用new关键字创建对象,需要使用构造器。2、使用反射机制创建对...
写评论
评论
收藏
马 兰花开,白云徜徉,清风拂面,
萍 秀妩媚,馨醉,惹人痴恋。
萍 园俊秀,彩蝶,飘逸烂漫。
很 想佳人,牵手结伴,嬉游春天。
高 山俯瞰,望小桥流水,景色妙曼。
兴 致勃发,娇娥轻揽,入梦辗转。
认 缘牵手,却难拥有,多少苦楚。
识 曲传来,撩动心扉,神闲。
你 若情真,折一只纸船,顺水漂岸。
2017-12-08 1
雪花揪痧五条粗痧
揪痧捏痧挤痧挟痧刮痧图片
揪痧捏痧挤痧花样
揪痧揪性痧
怎样全身揪痧一百条
今日寒露
帮我设计艺术签名wa拼音怎么读视频新华字典内容帮我写一首藏头诗
上滑了解更多
¥2FT0bmb5p6d¥
8. 用python对中文做情感分析,有没有好的接口推荐
import jieba
import numpy as np
# 打开词典文件,返回列表
def open_dict(Dict='hahah',path = r'/Users/zhangzhenghai/Downloads/Textming/'):
path = path + '%s.txt' %Dict
dictionary = open(path, 'r', encoding='utf-8')
dict = []
for word in dictionary:
word = word.strip('\n')
dict.append(word)
return dict
def judgeodd(num):
if num % 2 == 0:
return 'even'
else:
return 'odd'
deny_word = open_dict(Dict='否定词')
posdict = open_dict(Dict='positive')
negdict = open_dict(Dict = 'negative')
degree_word = open_dict(Dict = '程度级别词语',path=r'/Users/zhangzhenghai/Downloads/Textming/')
mostdict = degree_word[degree_word.index('extreme')+1: degree_word.index('very')] #权重4,即在情感前乘以3
verydict = degree_word[degree_word.index('very')+1: degree_word.index('more')] #权重3
moredict = degree_word[degree_word.index('more')+1: degree_word.index('ish')]#权重2
ishdict = degree_word[degree_word.index('ish')+1: degree_word.index('last')]#权重0.5
def sentiment_score_list(dataset):
seg_sentence = dataset.split('。')
count1 = []
count2 = []
for sen in seg_sentence: # 循环遍历每一个评论
segtmp = jieba.lcut(sen, cut_all=False) # 把句子进行分词,以列表的形式返回
i = 0 #记录扫描到的词的位置
a = 0 #记录情感词的位置
poscount = 0 # 积极词的第一次分值
poscount2 = 0 # 积极反转后的分值
poscount3 = 0 # 积极词的最后分值(包括叹号的分值)
negcount = 0
negcount2 = 0
negcount3 = 0
for word in segtmp:
if word in posdict: # 判断词语是否是情感词
poscount +=1
c = 0
for w in segtmp[a:i]: # 扫描情感词前的程度词
if w in mostdict:
poscount *= 4.0
elif w in verydict:
poscount *= 3.0
elif w in moredict:
poscount *= 2.0
elif w in ishdict:
poscount *= 0.5
elif w in deny_word: c+= 1
if judgeodd(c) == 'odd': # 扫描情感词前的否定词数
poscount *= -1.0
poscount2 += poscount
poscount = 0
poscount3 = poscount + poscount2 + poscount3
poscount2 = 0
else:
poscount3 = poscount + poscount2 + poscount3
poscount = 0
a = i+1
elif word in negdict: # 消极情感的分析,与上面一致
negcount += 1
d = 0
for w in segtmp[a:i]:
if w in mostdict:
negcount *= 4.0
elif w in verydict:
negcount *= 3.0
elif w in moredict:
negcount *= 2.0
elif w in ishdict:
negcount *= 0.5
elif w in degree_word:
d += 1
if judgeodd(d) == 'odd':
negcount *= -1.0
negcount2 += negcount
negcount = 0
negcount3 = negcount + negcount2 + negcount3
negcount2 = 0
else:
negcount3 = negcount + negcount2 + negcount3
negcount = 0
a = i + 1
elif word == '!' or word == '!': # 判断句子是否有感叹号
for w2 in segtmp[::-1]: # 扫描感叹号前的情感词,发现后权值+2,然后退出循环
if w2 in posdict or negdict:
poscount3 += 2
negcount3 += 2
break
i += 1
# 以下是防止出现负数的情况
pos_count = 0
neg_count = 0
if poscount3 <0 and negcount3 > 0:
neg_count += negcount3 - poscount3
pos_count = 0
elif negcount3 <0 and poscount3 > 0:
pos_count = poscount3 - negcount3
neg_count = 0
elif poscount3 <0 and negcount3 < 0:
neg_count = -pos_count
pos_count = -neg_count
else:
pos_count = poscount3
neg_count = negcount3
count1.append([pos_count,neg_count])
count2.append(count1)
count1=[]
return count2
def sentiment_score(senti_score_list):
score = []
for review in senti_score_list:
score_array = np.array(review)
Pos = np.sum(score_array[:,0])
Neg = np.sum(score_array[:,1])
AvgPos = np.mean(score_array[:,0])
AvgPos = float('%.lf' % AvgPos)
AvgNeg = np.mean(score_array[:, 1])
AvgNeg = float('%.1f' % AvgNeg)
StdPos = np.std(score_array[:, 0])
StdPos = float('%.1f' % StdPos)
StdNeg = np.std(score_array[:, 1])
StdNeg = float('%.1f' % StdNeg)
score.append([Pos,Neg,AvgPos,AvgNeg,StdPos,StdNeg])
return score
data = '用了几天又来评价的,手机一点也不卡,玩荣耀的什么的不是问题,充电快,电池够大,玩游戏可以玩几个小时,待机应该可以两三天吧,很赞'
data2 = '不知道怎么讲,真心不怎么喜欢,通话时声音小,新手机来电话竟然卡住了接不了,原本打算退,刚刚手机摔了,又退不了,感觉不会再爱,像素不知道是我不懂还是怎么滴 感觉还没z11mini好,哎要我怎么评价 要我如何喜欢努比亚 太失望了'
print(sentiment_score(sentiment_score_list(data)))
print(sentiment_score(sentiment_score_list(data2)))
9. 给了一堆数据 用python做文本情感分析 但是课题要求是事先将无意义的评论去处 这要怎么做
既然你已经学到了数据分析,那么基本的语法应该大都知道了吧。
这无非就是筛选数据的问题,先搞清楚什么是“无意义的评论”,它满足什么条件,再遍历评论,如果满足这个“无意义”的条件,那么就删除掉就是了。