【python 自然语言处理】对胡歌【猎场】电视剧评论进行情感值分析

2017 年 11 月 27 日 数据挖掘入门与实战 要学习更多点这→

 向AI转型的程序员都关注了这个号👇👇👇


大数据挖掘DT数据分析  公众号: datadw



主要内容

1、什么是SnowNLP?

2、SnowNLP可以干哪些事儿?

3、如何进行情绪判断?

4、猎场豆瓣热门短评抓取。

5、猎场热门短评情感分析。

6、附录(python 画词云图)


什么是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


教你机器学习,教你数据挖掘

长按图片,识别二维码,点关注

登录查看更多
4

相关内容

狭义的情感分析(sentiment analysis)是指利用计算机实现对文本数据的观点、情感、态度、情绪等的分析挖掘。广义的情感分析则包括对图像视频、语音、文本等多模态信息的情感计算。简单地讲,情感分析研究的目标是建立一个有效的分析方法、模型和系统,对输入信息中某个对象分析其持有的情感信息,例如观点倾向、态度、主观观点或喜怒哀乐等情绪表达。

知识荟萃

精品入门和进阶教程、论文和代码整理等

更多

查看相关VIP内容、论文、资讯等
【实用书】学习用Python编写代码进行数据分析,103页pdf
专知会员服务
194+阅读 · 2020年6月29日
深度学习自然语言处理概述,216页ppt,Jindřich Helcl
专知会员服务
212+阅读 · 2020年4月26日
算法与数据结构Python,369页pdf
专知会员服务
162+阅读 · 2020年3月4日
【新书】Python数据科学食谱(Python Data Science Cookbook)
专知会员服务
114+阅读 · 2020年1月1日
 【中科院信工所】社交媒体情感分析,40页ppt
专知会员服务
100+阅读 · 2019年12月13日
学习自然语言处理路线图
专知会员服务
137+阅读 · 2019年9月24日
R语言自然语言处理:文本分类
R语言中文社区
7+阅读 · 2019年4月27日
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
文本分析与可视化
Python程序员
9+阅读 · 2019年2月28日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
《小美好》短评文本情感分析+生成词云
数据挖掘入门与实战
5+阅读 · 2018年1月7日
【推荐】中文处理(BiLSTM分词)工具包FoolNLTK
机器学习研究会
6+阅读 · 2017年12月27日
京东商品评论情感分析:数据采集与词向量构造方法
数据挖掘入门与实战
5+阅读 · 2017年12月19日
教你用Python爬虫股票评论,简单分析股民用户情绪
数据派THU
10+阅读 · 2017年12月12日
Python 自然语言处理(NLP)工具库汇总
数据挖掘入门与实战
7+阅读 · 2017年9月25日
Arxiv
5+阅读 · 2019年10月11日
Arxiv
3+阅读 · 2019年3月1日
CoCoNet: A Collaborative Convolutional Network
Arxiv
6+阅读 · 2019年1月28日
VIP会员
相关VIP内容
相关资讯
R语言自然语言处理:文本分类
R语言中文社区
7+阅读 · 2019年4月27日
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
文本分析与可视化
Python程序员
9+阅读 · 2019年2月28日
Python 爬虫实践:《战狼2》豆瓣影评分析
数据库开发
5+阅读 · 2018年3月19日
《小美好》短评文本情感分析+生成词云
数据挖掘入门与实战
5+阅读 · 2018年1月7日
【推荐】中文处理(BiLSTM分词)工具包FoolNLTK
机器学习研究会
6+阅读 · 2017年12月27日
京东商品评论情感分析:数据采集与词向量构造方法
数据挖掘入门与实战
5+阅读 · 2017年12月19日
教你用Python爬虫股票评论,简单分析股民用户情绪
数据派THU
10+阅读 · 2017年12月12日
Python 自然语言处理(NLP)工具库汇总
数据挖掘入门与实战
7+阅读 · 2017年9月25日
Top
微信扫码咨询专知VIP会员