Python Tool 101-Tool 002-Python 情感分析 SnowNLP

环境背景:

今天想尝试一下导师说过的情感分析,根据自身的实际情况选择SnowNLP来做个有趣的实验。SnowNLP是咋们中国人受到了TextBlob的启发后开发的python类库,能够非常方便的处理中文文本内容,划重点方便处理中文的类库!!!,类库中的算法和训练好的字典都已经准备好了。唯一需要注意的是要使用unicode编码,所以使用时请自行decode成unicode。

知道这个SnowNLP是什么之后,我们开始设计下实验方案。

提出问题:

SnowNLP分析豆瓣电影简介的情感度

解决方案:

爬虫选用:scrapy

数据库选用:mongodb

python环境选用:python3

情感分析选用:SnowNLP

实际操作:

第一步

安装mongodb数据库

第二步

安装python 第三方库

python -m pip install pip install pymongo
python -m pip install pip install scrapy
python -m pip install pip install snownlp

第三步

编写爬虫

ln -s /usr/local/python3/bin/scrapy /usr/bin/scrapy
scrapy startproject douban
cd douban
scrapy genspider douban douban.com

vi spider/douban.py
```
# -*- coding: utf-8 -*-
from scrapy.spiders import CrawlSpider
from douban.items import DoubanItem
import scrapy
class DoubanSpider(CrawlSpider):
name = "douban"
offset = 0
url = "https://movie.douban.com/top250?start="
start_urls = (
url + str(offset),
)
def parse(self,response):
item = DoubanItem()
movies = response.xpath('//div[@class="info"]')
print('*'*80)
print(len(movies))
for each in movies:
# 电影名
item['title'] = each.xpath('.//span[@class="title"][1]/text()').extract()[0]
# 基本信息
item['bd'] = each.xpath('.//div[@class="bd"]/p/text()').extract()[0]
# 评分
item['star'] = each.xpath('.//div[@class="star"]/span[@class="rating_num"]/text()').extract()[0]
# 简介
quote = each.xpath('.//p[@class="quote"]/span/text()').extract()
if len(quote) != 0:
item['quote'] = quote[0]
yield item


if self.offset < 225:
self.offset += 25
yield scrapy.Request(self.url + str(self.offset), callback=self.parse)
```

vi items.py
```
# -*- coding: utf-8 -*-
import scrapy
from scrapy import Item,Field
class DoubanItem(scrapy.Item):
# 电影名
title = scrapy.Field()
# 基本信息
bd = scrapy.Field()
# 评分
star = scrapy.Field()
# 简介
quote = scrapy.Field()
```

vi pipelines.py
```
class DoubanPipeline(object):
def __init__(self):
conn = MongoClient('172.10.2.105', 27017)
db = conn.moves
self.post = db.Book
def process_item(self, item, spider):
bookInfo = dict(item)
print(bookInfo)
self.post.insert(bookInfo)
return item
```

scrapy crawl douban

爬虫脚本可以获取豆瓣电影Top250 的一些基本信息,当然也包括我们需要的电影简介。把这些爬到的数据都存在mongodb中,等下做情感分析的时候再从mongodb中获取电影简介~~

第四步

编写情感分析

# -*- coding: utf-8 -*-
from pymongo import MongoClient
from snownlp import SnowNLP
conn = MongoClient('172.10.2.105', 27017)
db = conn.moves
my_set = db.Book
for i in my_set.find():
print(i['quote'])
analyze = SnowNLP(u'%s' % i['quote'])
print("情感度:%s " % analyze.sentiments)

第五步

运行情感分析文件,查看结果。。。

结果很明显都是好评~~情感度就没有低于0.85的!!!

大家可以修改一下脚本测测你和朋友同事聊天时,他们回复时的情感度~~