向AI转型的程序员都关注了这个号👇👇👇
大数据挖掘DT数据分析 公众号: datadw
主要内容
什么是SnowNLP?
snowNLP,可以分词,标注,还可以进行情绪分析。
SnowNLP是一个python写的类库,可以方便的处理中文文本内容,是受到了TextBlob的启发而写的,由于现在大部分的自然语言处理库基本都是针对英文的,于是写了一个方便处理中文的类库,并且和TextBlob不同的是,这里没有用NLTK,所有的算法都是自己实现的,并且自带了一些训练好的字典。注意本程序都是处理的unicode编码,所以使用时请自行decode成unicode。
SnowNLP可以干哪些事儿?
1、分词
2、词性标注
3、断句
4、情绪判断
5、拼音
6、繁体转简体
7、关键词抽取
8、概括总结文意
9、信息量衡量
10、文本相似性
如何进行情绪判断?
返回值为正面情绪的概率,
越接近1表示正面情绪
越接近0表示负面情绪
当值大于 0.5 时代表句子的情感极性偏向积极,当分值小于 0.5 时,情感极性偏向消极,当然越偏向两边,情绪越偏激。
一个例子:
# encoding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
from snownlp import SnowNLP
text1="这个人脾气真坏,动不动就骂人"
text2='这个人脾气真好,经常笑'
s1 = SnowNLP(text1.decode('utf-8'))
s2=SnowNLP(text2.decode('utf-8'))
print text1,s1.sentiments
print text2,s2.sentiments
"D:\Program Files\Python27\python.exe" D:/PycharmProjects/情感分析/情感分析测试例子.py
这个人脾气真坏,动不动就骂人 0.0363076212908
这个人脾气真好,经常笑 0.730173371865
豆瓣猎场短评爬虫
# encoding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import re
import requests
import codecs
import time
import random
from bs4 import BeautifulSoup
absolute = 'https://movie.douban.com/subject/26322642/comments'
absolute_url = 'https://movie.douban.com/subject/26322642/comments?start=20&limit=20&sort=new_score&status=P&percent_type='
url = 'https://movie.douban.com/subject/26322642/comments?start={}&limit=20&sort=new_score&status=P'
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0','Connection':'keep-alive'}
def get_data(html):
soup=BeautifulSoup(html,'lxml')
comment_list = soup.select('.comment > p')
next_page= soup.select('#paginator > a')[2].get('href')
date_nodes = soup.select('.comment-time')
return comment_list,next_page,date_nodes
if __name__ == '__main__':
########先登录豆瓣,把cookie复制放在cookie.txt
f_cookies = open('cookie.txt', 'r')
cookies = {}
for line in f_cookies.read().split(';'):
name, value = line.strip().split('=', 1)
cookies[name] = value
html = requests.get(absolute_url, cookies=cookies, headers=header).content
# print html
comment_list = []
# 获取评论
comment_list, next_page,date_nodes= get_data(html)
soup = BeautifulSoup(html, 'lxml')
comment_list = []
while (next_page != []): #查看“下一页”的A标签链接
print(absolute + next_page)
html = requests.get(absolute + next_page, cookies=cookies, headers=header).content
soup = BeautifulSoup(html, 'lxml')
comment_list, next_page,date_nodes = get_data(html)
with open(u"comments.txt", 'a+') as f:
for node in comment_list:
comment = node.get_text().strip().replace("\n", "")
print comment
f.writelines(comment + u'\n')
time.sleep(1 + float(random.randint(1, 100)) / 20)
猎场热门短评情感分析
下面我们对猎场热门短评基于原有 SnowNLP 进行积极和消极情感分类,读取每段评论并依次进行情感值分析,最后会计算出来一个 0-1 之间的值。
# encoding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import numpy as np
from snownlp import SnowNLP
import matplotlib.pyplot as plt
comment = []
with open('comments.txt', mode='r') as f:
rows = f.readlines()
for row in rows:
if row not in comment:
comment.append(row.strip('\n'))
def snowanalysis(self):
sentimentslist = []
for li in self:
s = SnowNLP(li.decode('utf-8'))
print li
print s.sentiments
sentimentslist.append(s.sentiments)
plt.hist(sentimentslist, bins=np.arange(0, 1, 0.01))
plt.show()
if __name__ == '__main__':
snowanalysis(comment)
结论:通过热门短评的情感分析,好评稍大于差评,猎场还是值得一看的。
http://blog.csdn.net/u013421629/article/details/78583277
附录(python 画词云图)
# encoding: utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import jieba.analyse # 导入结巴分词
import numpy as np # numpy
from wordcloud import WordCloud, STOPWORDS # 词云工具和自带的的停用词
from PIL import Image # 图片处理
import matplotlib.pyplot as plt
def handle(filename, stopword):
with open(filename, 'r') as f:
data = f.read()
wordlist = jieba.analyse.extract_tags(data, topK=100) # 分词,取前100
wordStr = " ".join(wordlist)
print wordStr
hand = np.array(Image.open('hang1.jpg')) # 打开一张图片,词语以图片形状为背景分布
my_cloudword = WordCloud(
# wordcloud参数配置
width=1024,
height=768,
background_color = 'white', # 背景颜色
mask = hand, # 背景图片
max_words = 300, # 最大显示的字数
stopwords = stopword, # 停用词
max_font_size = 100, # 字体最大值
font_path='simsun.ttc', # 设置中文字体,若是有中文的话,这句代码必须添加,不然会出现方框,不出现汉字
random_state=3, # 设置有多少种随机生成状态,即有多少种配色方案
)
my_cloudword.generate(wordStr) # 生成图片
my_cloudword.to_file('wordcloud.png') # 保存
plt.imshow(my_cloudword) # 显示词云图
plt.axis('off') # 是否显示x轴、y轴下标
plt.show() # 显示
if __name__ == '__main__':
handle('comments.txt', STOPWORDS)
人工智能大数据与深度学习
搜索添加微信公众号:weic2c
长按图片,识别二维码,点关注
大数据挖掘DT数据分析
搜索添加微信公众号:datadw
教你机器学习,教你数据挖掘
长按图片,识别二维码,点关注