序
因女朋友毕业设计,涉及到自然语言处理,所以笔者简单研究下了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')
结果如下:
到此为止,所有的过程全部写完。如有错误之处欢迎大家留言。
(完)
看完本文有收获?请转发分享给更多人
领取专属 10元无门槛券
私享最新 技术干货