我用Python进行情感分析,让程序员和女神牵手成功

先用电影评论来做情感分析,主要包括下面几个主要内容(看到最后哦):

1、准备文本数据

2、基于文本文档来构建特征向量

3、训练机器学习模型来区分电影评论的正面评论和负面评论(对你的女神同样适用哦~~)

4、使用外存学习和在线学习算法来处理大数据

在本篇文章中,主要介绍对于电影评论数据的准备工作。

一、情感分析

情感分析也称观点挖掘(opinion mining),是机器学习中自然语言处理(NLP)领域一个非常流行的分支,它主要是分析文档的情感倾向。

二、下载数据

请自行准备一个电影信息(或者直接使用你和女神的聊天信息)

该电影评论是来自IMDb中的电影评论,数据集一共包含了50000个关于电影的正面评论和负面评论,正面评论代表对于影片的评分超过了6颗星,而负面评论则表示评分低于5颗星。50000条评论被分成了四个文件夹train的neg和pos和test的neg和pos,其中每个文件夹中包含了12500个txt电影评论文件,其中pos代表正面评论,neg代表负面评论。所以,我们需要将这50000个txt文件整合成一个表格,表格分为两列,第一列表示评论的内容,第二列表示评论是属于正面(用1表示)还是负面(用0表示)。

三、生成电影评论的表格文件

将50000个txt文件整合成一个表格文件的时候,需要十分钟左右。我们可以通过Python的pyprind库将整个处理过程可视化,同时它还能根据当前计算机的运行状态来估计剩余处理时间,处理完成之后,还能查看消耗的总时间。通过python的数据分析库pandas将电影评论保存成一个csv文件。

1、预计处理总时间

2、统计处理总时间

3、python实现代码

我们还需要知道将文本转换为特征向量前的一些准备工作,主要内容包括:

1、清洗文本数据

2、标记文档

3、词袋模型

一、清洗文本数据

清洗文本需要将文本中所包含的一些不必要的字符删除。

1、删除不必要的字符

print(data["review"][0][-50:])

is seven.

Title (Brazil): Not Available

发现评论中含有一些HTML标记符、标点符号、以及其他的非字母符号。HTML标记符在对于我们对评论做情感分析的时候没有影响,至于标点符号可能会影响句子的语义,为了简化处理我们将标点符号进行删除,保留表情符号(如":)"),因为表情符号对于电影评论情感的分析很有帮助。下面,我们通过python的正则表达式来删除这些不必要的字符。

python的正则表达式提供了一种字符串搜索特定字符串的方便有效方法,正则表达式也要很多的技巧和方法,如果对正则表达式有兴趣的话可以自己去了解一下。在这里我们只是简单的使用一下,所以对正则表达式不会有太过详细的介绍。

2、标记文档

对于英文文档我们可以利用其天然的空格作为单词的分隔符,如果是中文的时候,可以利用一些分词库如jieba分词。在句子中,我们可能会遇见先"runners"、"run"、"running"单词不同的形式,所以我们需要通过词干提取(word

stemming)来提取单词原形。最初的词干提取算法是由Martin F. Porter在1979年提出的,被称为porter

stemming算法。我们可以通过安装python的自然语言工具包NLTK,官网安装链接:http://www.nltk.org/install.html,在NLTK中已经是实现了Porter

Stemming算法,还有实现了比它更高级的Snowball stemmer和Lancaster stemmer与porter

stemming相比,它们更加的提取速度更快。可以通过pip命令进行安装

pip install nltk

3、停用词的移除

停用词大致可以分为两类,一类是功能词,这些功能词非常普遍,与其他的词相比,功能词没有什么实际的含义,比如"the"、"is"、"at"、"which"等。还有一类是词汇词,比如"want"等。停用词对于电影评论的情绪分类没有任何意义,所以我们需要将一些停用词进行删除。通过nltk.download函数获取NLTK提供的停用词,并使用这些停用词来移除电影评论中的停用词。NLTK库提供的停用词,一共有179个,下面给出部分的停用词

我们还需要做什么呢?

1、将单词转换为特征向量

2、TF-IDF计算单词关联度

在之前,我们已经知道一些文本的预处理和分词。这篇文章中,主要介绍如何将单词等分类数据转成为数值格式,以方便我们后面使用机器学习来训练模型。

一、将单词转换为特征向量

词袋模型(bag-of-words model):将文本以数值特征向量的形式来表示。主要通过两个步骤来实现词袋模型:

1、为整个文档集(包含了许多的文档)上的每个单词创建一个唯一的标记。

2、为每个文档构建一个特征向量,主要包含每个单词在文档上的出现次数。

注意:由于每个文档中出现的单词数量只是整个文档集中很少的一部分,因此会有很多的单词没有出现过,就会被标记为0。所以,特征向量中大多数的元素就会为0,就会产生稀疏矩阵。

下面通过sklearn的CountVectorizer来实现一个词袋模型,将文档转换成为特征向量

通过count.vocabulary_我们可以看出每个单词所对应的索引位置,每一个句子都是由一个6维的特征向量所组成。其中,第一列的索引为0,对应单词"and","and"在第一和二条句子中没有出现过,所以为0,在第三条句子中出现过一些,所以为1。特征向量中的值也被称为原始词频(raw

term frequency)简写为tf(t,d),表示在文档d中词汇t的出现次数。

注意:在上面词袋模型中,我们是使用单个的单词来构建词向量,这样的序列被称为1元组(1-gram)或单元组(unigram)模型。除了一元组以外,我们还可以构建n元组(n-gram)。n元组模型中的n取值与特定的应用场景有关,如在反垃圾邮件中,n的值为3或4的n元组可以获得比较好的效果。下面举例说明一下n元组,如在"the weather is sweet"这句话中,1元组:"the"、"weather"、"is"、"sweet"。2元组:"the weather"、"weather is"、"is sweet"。在sklearn中,可以设置CountVecorizer中的ngram_range参数来构建不同的n元组模型,默认ngram_range=(1,1)。sklearn通过CountVecorizer构建2元组

二、TF-IDF计算单词关联度

在使用上面的方法来构建词向量的时候可能会遇到一个问题:一个单词在不同类型的文档中都出现,这种类型的单词其实是不具备文档类型的区分能力。我们通过TF-IDF算法来构建词向量,从而来克服这个问题。

词频-逆文档频率(TF-IDF,term frequency-inverse document frequency):tf-idf可以定义为词频×逆文档频率

其中tf(t,d)表示单词t在文档d中的出现次数,idf(t,d)为逆文档频率,计算公式如下

其中,nd表示文档的总数,df(t,d)表示包含单词t的文档d的数量。分母中加入常数1,是为了防止df(t,d)=0的情况,导致分母为0。取log的目的是保证当df(t,d)很小的时候,不会导致idf(t,d)过大。

通过sklearn的TfidfTransformer和CountVectorizer来计算tf-idf

可以发现"is"(第二列)和"the"(第六列),它们在三个句子中都出现过,它们对于文档的分类所提供的信息并不会很多,所以它们的tf-idf的值相对来说都是比较小的。

注意:sklearn中的TfidfTransformer的TF-IDF的计算与我们上面所定义TF-IDF的公式有所不同,sklearn的TF-IDF计算公式

通常在计算TF-IDF之前,会对原始词频tf(t,d)做归一化处理,TfidfTransformer是直接对tf-idf做归一化。TfidfTransformer默认使用L2归一化,它通过与一个未归一化特征向量L2范数的比值,使得返回向量的长度为1,计算公式如下:

下面通过一个例子来说明sklearn中的TfidfTransformer的tf-idf的计算过程,以上面的第一句话"The sun is shining"为例子

1、计算原始词频

a、单词所对应的下标

b、计算第三句话的原始词频tf(t,d)

c、计算逆文档频率idf(t,d)

注意:其他的词在计算tf-idf都是0,因为原始词频为0,所以就不需要计算idf了,log是以自然数e为底。

d、计算tf-idf

所以,第一个句子的tf-idf特征向量为[0,1,1.29,1.29,0,1,0]

e、tf-idf的L2归一化

在下一篇文章中将介绍如何使用这些句子的特征向量来构建一个模型进行情感分类。虽然在实际演示的是电影影评,但是训练好了可是可以用来处理你的聊天信息的哦~~~

想不想用来测试一下你的女神和你聊天时候的情绪呢?保你牵手成功!!!

另外,小编有自己的学习交流群大家如果想要来学习的话,可以一起来交流:719+139+688,不管你是小白还是大牛,小编都欢迎,而且小编会在群里面不定期分享干货,包括小编自己整理的一份2018年最新学习资料和大神分享直播,欢迎初学和进阶中的小伙伴

原文地址:https://www.cnblogs.com/xiaomu-/p/8965130.html

时间: 2024-08-28 20:02:44

我用Python进行情感分析,让程序员和女神牵手成功的相关文章

[软件人生]关于程序员的坚持与成功

给灵科弟兄的一段话: 我不希望大家照着上面说的,变得世故. 虽然有些时候,有些事情是矛盾的. 但是,我还是坚持认为,保持自己,可能比随波逐流更重要,如果你真得想成为程序员中的翘楚,而不是被众人淹没. 高潮和低谷都是会有的,高潮期往往很短暂,而低谷期往往很漫长,不是感觉的漫长,而是实际上的漫长. 但是,如何在这个期间增强自己的能力,增加自己的积累,尤为重要.大多数人都是因此而转行或者从此默默无闻的. 虽然不代表坚持了,一定会成功,但不为了成功,我还是建议坚持. [软件人生]关于程序员的坚持与成功,

python snownlp情感分析简易demo

SnowNLP是国人开发的python类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典.注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode.MIT许可下发行.其 github 主页我自己修改了上文链接中的python代码并加入些许注释,以方便你的理解: f

java/python/php/android/ios/前端程序员视频教程,全部都在这里了,应有尽有

内容付费 知识付费 Make your content more valuable 内容付费,让知识更具价值 所有资源打包链接:https://www.fageka.com/sell/FxXXLXM1431 编程: 程序员文档教程合集--java/php/ios/android等多种文档教程,各种设计思维.各种电子版教程应有尽有,都在这里了:https://www.fageka.com/sell/zRBQada0604 java打包链接--包含java所有资料,含Hadoop:https://w

30多年程序员生涯经验总结(成功源自于失败中的学习;失败则是因为容忍错误的横行)

英文原文:Lessons From A Lifetime Of Being A Programmer 在我 30 多年的程序员生涯里,我学到了不少有用的东西.下面是我这些年积累的经验精华.我常常想,如果以前能有人在这些经验上指点一二,我相信我现在会站得更高. 1. 客户在接触到产品之后,才会真正明白自己的需求. 这是我在我的第一份工作上面学来的.只有当我们给客户展示产品的时候,他们才会意识到哪些是必须的.给出一个功能性原型设计远远比一张长长的文字表格要好. 2. 只要有充足的时间,所有安全防御系

【程序员项目经理】成功经理人的34个好习惯

一个程序员如果想要做到项目经理,除了宅在家里以外,是要学很多其他能力的 成功经理人的34个好习惯 不说"不可能"三个字 凡事第一反应:找方法,不找借口 遇到挫折,大声对自己说:太棒了 不说消极的话,不落入消极情绪,一旦出现立即正面处理 凡事先订立目标,并且尽量制作"梦想版" 六点优先工作制,每一分秒做生产力的事情 凡事预先作计划,尽量将目标视觉化 随时用零碎的时间(如等人,排队等)做零碎小活 守时 写下来,不要太依靠脑袋记忆 随时记录灵感 把重要的方法.观念写下来,

就现实而谈:程序员“努力就会成功”?真相残酷但又不得不面对!

那一年,我加入了某知名公司的某知名部门,在办公室中,我看到了到处都挂着--"努力就会成功"的条幅,这个部门中大多数员工的邮件签名都会有"努力就会成功",我感到一种热血沸腾的气氛,这是我在多年工作来都没有感受到的,当时挺高兴地能和这样一群人工作,也没多想.直到有一天,我看到这些高级的软件工程师们把自己关在又挤又吵的会议室中,拼命地加班,真是拼命,周一到周日,每天早上10点到凌晨3点甚至凌晨5点,连国庆节都来上班,就在这样的环境和状态下,连续干了三个多月--上线前,QA

2019年Python工程师面试题,程序员要多注意啦!

关于Python,google在2000之后在其浏览器上做了语言支持,一些涉及基础核心基础的公司也在开始网页服务的支持,之后的相关数据库同样采取了这么行动.最近几年,Python更是进入了其高峰热门期,许多工程师都开始学习并互转了这个这个行业,由此可见,这个行业对Python人才的吸引力还是相当大的.既然有吸引力,必定存在相当大的人才需求.关于Python就业后待遇,毕竟是处于大热的编程语言,待遇一定不会差到哪里.具体的薪资待遇还是要靠自己的技术水平来衡量. 废话不多说,直接上题: HTTPS和

上万程序员总结:自学Python,掌握到什么程度就可以找工作了?

前言:Python现在非常火,语法简单而且功能强大,很多同学都想学Python!在这里把最好的分享给大家!希望能带给大伙儿一些学习上的帮助觉得好的话可以多多关注哟~每天持续分享更多优质内容!文章最后会有Python视频教程福利哟! Python语言目前主要应用在web.大数据以及机器学习等领域的开发上,掌握Python语言是第一步,接着要针对这些领域做一些具体的案例开发,这些案例开发练习对求职是有很大帮助的.下面我从两个大方面来描述Python,一方面描述Python语言的基本语法内容,另一方面

程序员到架构师需要的编程基础

程序员到架构师的进阶之路是非常艰辛和漫长的,不但需要掌握很多高级的知识技能,还需要有过硬的基础知识.<Java架构师指南>就是这样一本指导小白到架构师进阶的书.本文摘取了这本书中的第一章节,主要介绍Java程序员走向架构师的基础知识,还有开发环境的搭建.通过本文的学习,可以大致了解程序员的进阶之路,也可更加深刻地认识到程序员的发展方向. 点此链接购买纸书 本书特别适合Java Web领域的开发人员以及刚步入职场的新手.本书通过讲述Java架构师必备的知识技能,让广大读者在原有知识的基础上更上一