首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

NLTK自然语言处理之情感极性分析

因女朋友毕业设计,涉及到自然语言处理,所以笔者简单研究下了python的两个做自然语言处理的模块,如有错误之处欢迎大家留言。

本文主要内容:

使用自然语言处理的几个模块简单实现对FaceBook用户评论做情感极性分析,不做过多介绍。

本文受众:

没写过爬虫的萌新。

入门

0.准备工作

需要准备的东西: Python2.7、一个IDE或者随便什么文本编辑工具。

安装所需要的模块

.技术部已经研究决定了,你来写爬虫。

随便建立一个工程,工程名为xxx,可以替换为你喜欢的名字。

在工程中中创建一个python文件,比如sentiment.py来作为情感分析脚本。

内容如下:

1.创建sentiment.py文件导入所需要的模块

#coding:utf-8

fromtextblobimportTextBlob

importxlwt

importmatplotlib.pyplotasplt

importre

#打开要读取的数据文件

ff =open("data.txt")

#读取评论文件并转码 , 转小写

text = ff.read().decode("utf-8").lower()

#使用正则表达式去掉文本中的标点符号

r='[’!"#$%&\'()*+,-./:;?@[\\]^_`{|}~]+'

text=re.sub(r,'',text)

#对单词进行分割,按行分割,一行为一个用户评论

tokens = text.split("\n")

#print tokens

#定义一个字典

clean_tokens =list()

#创建excel

excel1 = xlwt.Workbook()

#向表中添加一个sheet

sheet1 = excel1.add_sheet("sentiment",cell_overwrite_ok=True)

#写入列名

sheet1.write(,,'PostMessage')

sheet1.write(,1,'polarity')

sheet1.write(,2,'subjectivity')

#存放极性值

count =list()

#控制行

n=1

#遍历每一行

forclean_tokensintokens:

# print clean_tokens

#使用TextBlob

testimonial = TextBlob(clean_tokens)

#打印输出极性,主观性到控制台查看

print"polarity",testimonial.sentiment[],\

"---------------------","subjectivity",testimonial.sentiment[1]

#打印主观性,极性,评估,形容词

# print testimonial.sentiment_assessments

#将结果写入excel单元格中

sheet1.write(n,, clean_tokens)#用户评论

sheet1.write(n,1, testimonial.sentiment[])#polarity 极性

sheet1.write(n,2, testimonial.sentiment[1])#subjectivity 主观性

#将极性值放入字典中

count.append(testimonial.sentiment)

n+=1#控制行数w

#保存excel

excel1.save('sentiment.xls')

2.跑一个试试?

此时评论与情感极性结果就保存在excel中了

#画极性值的图

plt.figure()

plt.plot(count)

plt.savefig("sentiment.jpg")

plt.show()

解析

我们刚才是对英文的文本评论进行分析,所以需要先将英文文本读取出来之后在对其进行数据清洗,将所有的大写英文字母全部转换为小写,防止后期大小写字母影响我们做词频分析。

2.使用NLTK去除停用词并制作词频图

#调用nltk模块自带的停用词

sr = stopwords.words("english")

#循环遍历,如果文本中的评论不含有停用词库中的单词则进行单词统计,否则,则跳出不做统计

fortokenintokens:

if nottokeninsr:

#将单词追加到字典中

clean_tokens.append(token)

else:

continue

1.开始制作去除停用词之后的词频

#开始统计词频

freq = nltk.FreqDist(clean_tokens)

'''

去除停用词后的词频

'''

#画图,括号中的20,代表画图前20个单词的词频

freq.plot(20,cumulative=False)

词频图结果如下:

#创建excel

excel1 = xlwt.Workbook()

#添加一个sheet

sheet1 = excel1.add_sheet("freq",cell_overwrite_ok=True)

sheet1.write(,,'word')

sheet1.write(,1,'count')

#遍历结果

n=1

forkey,valinfreq.items():

printkey,val

#将结果循环写入excel中

sheet1.write(n,, key)

sheet1.write(n,1, val)

n +=1#控制行数

#保存excel

excel1.save('frequency.xls')

#encoding:utf-8

'''

Part-of-speech Tagging(词性标注)

'''

fromtextblobimportTextBlob

#打开要读取的数据文件

ff =open("data.txt")

#读取评论文件并转码

text = ff.read().decode("utf-8").lower()

#对单词进行分割,按行分割,一行为一个用户评论

tokens = text.split("\n")

#print tokens

#定义一个字典

clean_tokens =list()

ww =open("tags.txt","w")

#遍历每一行

forclean_tokensintokens:

# print clean_tokens

#使用TextBlob

testimonial = TextBlob(clean_tokens)

#输出词性标注

printtestimonial.tags

#打印主观性,极性,评估,形容词

# print testimonial.sentiment_assessments

结果如下:

#encoding:utf-8

'''

python2.7

'''

#导入词云的包

fromwordcloudimportWordCloud

#导入matplotlib作图的包

importmatplotlib.pyplotasplt

#读取文件,返回一个字符串,使用utf-8编码方式读取,

# 该txt文本文件位于此python同以及目录下

#注意:该txt文本文件必须是utf-8编码

f =open('data.txt').read().decode("utf-8")

#生成一个词云对象

wordcloud = WordCloud(

background_color="white",#设置背景为白色,默认为黑色

width=1500,#设置图片的宽度

height=960,#设置图片的高度

margin=10#设置图片的边缘

).generate(f)

# 绘制图片

plt.imshow(wordcloud)

# 消除坐标轴

plt.axis("off")

# 展示图片

plt.show()

# 保存图片

wordcloud.to_file('english_ciyun.png')

结果如下:

到此为止,所有的过程全部写完。如有错误之处欢迎大家留言。

(完)

看完本文有收获?请转发分享给更多人

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180421G1DN4T00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券