Python爬虫和情感分析简介
摘要
这篇短文的目的是分享我这几天里从头开始学习Python爬虫技术的经验,并展示对爬取的文本进行情感分析(文本分类)的一些挖掘结果。 不同于其他专注爬虫技术的介绍,这里首先阐述爬取网络数据动机,接着以豆瓣影评为例介绍文本数据的爬取,最后使用文本分类的技术以一种机器学习的方式进行情感分析。由于内容覆盖面巨大,无法详细道尽,这篇文章旨在给那些对相关领域只有少量或者没有接触的人一个认知的窗口,希望激发读者自行探索的兴趣。
以下的样本代码用Pyhton写成,主要使用了scrapy, sklearn两个库。
所以,什么是情感分析(Sentiment Analysis)?
情感分析又叫意见挖掘(Opinion Mining), 是一个研究人们对某种事物,例如产品,话题,政策的意见,情绪或者态度的领域。 随着网路上意见型数据的爆发,情感分析也被广泛研究和应用。Bing Liu 的 Sentiment Analysis and Opinion Mining 对此做了比较全面的概括和案例研究,另一篇Bo Pang 的经典论文 Opinion Minning and Sentiment Analysis 则着重研究了情感分类这一问题。
简单的一个应用的例子,某公司想调查自己在淘宝上销售的产品的受喜爱程度,就可以从产品评论入手, 用一个训练好的分类器判断每个留下评论用户的对此产品的喜好态度,积极的或者是消极的评价,以此展开,充分挖掘文本内容。
Python爬虫
当然,情感分析的第一步是获取数据,而网络尤其是社交网络是存在着丰富而易于获得的意见型数据资源。Python的开源爬虫库scrapy就很好用,这也是作为一个新手上手的首选工具。scrapy wiki 提供了全面的学习资源,甚至有中文的资料和说明文档。就像我一直强调的,数据科学家是一个要具备多领域技能的职位,以练代学不失为一种很好的途径。我鼓励对Python爬虫跃跃欲试的读者不要担心自己知识不足,这里没有门槛,直接上就是了。
当你读完了上述介绍文档之后,你应该知道一个scrapy项目的组成,抓取流程,scrapy里每种Spider的应用场景,大致了解XPATH的语法规则。这样之后你就了解到编写一个简单爬虫只需四步:
1.scrapy startproject PROJECT_NAME
2.定义一个爬虫类:
- 选择爬虫种类(Spider, CrawlSpider), 取决于目标和爬虫各自合适的应用场景
- 有一个初始url,或者一个生成初始url的方法
- 有一个能够生成请求(request)的“解析(parse)”方法
3. 在item类里想要抓取的内容
4. scrapy crawl SPIDER_NAME
我上手的第一个例子是爬取豆瓣的影评数据,选择豆瓣一是因为其丰富的语料资源和配备的打分体系,便于分类问题的标签获得。 二是可以避开账户登录,限制少。思路是选取一部特定的电影,然后爬取其所有的短评和评分。这样后期文本就可以作为分类特征,评分则作为分类标签。 我选了绣春刀(2014年最喜欢的电影)作目标,定义的爬虫类如下:
简短几十行代码之后你已经能够开始抓取一部电影的全部短评和评分了。在这之前,记得在settings里加一个DOWNLOAD_DELAY = 2,不然的话爬不到一半就会被豆瓣给禁了。
情感分类
特征转化
当我们得到一条影评时,能够通过某种算法自动地预测出该影评是否时积极还是消极?计算机不会理解人类的文字符号,有没有一种方法能够将文字转化为机器能够理解的信息?举简单的线性回归的例子,在作回归分析时我们都会利用对回归预测有帮助的变量作为特征(features), 这里我们主要将文字作为含有可用信息的特征。 通常多是的分类算法都需要量化的具有固定长度的特征向量,原始文本需要一步转换之后才能“喂给”这些分类算法。这也是情感分类问题与一般的分类问题相比不同的地方。
最直接也最常规的一种转化方法是计算单词(单个字) 在文本中的出现频率,也就是:
将一段文本划分成若干其组成词语,比如对英文我们可以以空格和标点符号分割单词,对中文我们可以利用一些完备的词语库。
计算每个词语在一段文本中的出现次数
这样,每单个词语的频率就代表一个变量(特征), 每一条短评代表一个样本。
成功将文本转化为特征阵之后,你可能会想,一些经常用到的词例如“的“,”我“,实际上对判断喜好的帮助应该不大,但是它们的高频率可能会盖过那些真正重要的词,从而降低特征的预测能力。TF-IDF 是一种常用的再权重方法。主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。
N-grams
即使是加了权重以后,这种以单个词语作特征的方式还是没办法很好的传递句意啊。一段文字的意思不仅取决于其组成的词语,也在于这些词语间的排列和依赖关系。就像“我爱她”和“她爱我”由三个相同的字组成,但是字的顺序不同表达的意思也不一样。
一种解救的方法是利用N-gram。这里的N指的是一组词语的数量。与其用一个词语代表一个特征,我们可以将两个甚至更多的词语连在一起组成一个特征。背后的思路也很简单:比较两个文本,如果它们有更多的子集相同,那它们就更加相似。上面的例子里,除了“我”,“有”,“小毛驴”,“北京”之外,对一个2-gram,我们还会有“我有”,”有小毛驴“,”有北京“这样的组合出现在特征矩阵中。
重新回到 绣春刀…
我一共爬取了16587条短评,比总的短评数量要少,因为中途断网实际上爬取了一半左右的短评,更重要的原因是一些短评没有评级所有并没有使用。根据打星的数量,三个星及以下视为消极评价,四个星及以上是为积极评价。
基本的操作流程是:
使用了几个文本分类里表现较好的分类器:Naive Bayes, Stochastic Gradient Descent, Support Vector Machine, Random Forest.
最好的分类器是Bernoulli Naive Bayes,交叉验证估计的预测准确率为0.67。
至于分类器的比较,变量筛选,参数选择等内容已经超出了这篇文章覆盖的范围。
总结
1. 介绍了情感分析的动机和定义
2. 情感分析的前提是意见型数据,而爬虫能够获取大量评论及文本型数据,于是我们介绍了流行的Python爬虫工具scrapy,尝试从头开始学起写一个简单的爬虫
3. 文本分类的一个困难在于将文本转化为能“喂给”分类算法的特征阵,最直接的方法是将文本分隔成一组词语并计算词语出现的频率
4. 利用N-gram试图抓取词语间的顺序和依赖关系,尽可能减少语义的流失
文章来源36大数据,www.36dsj.com ,微信号dashuju36 ,36大数据是一个专注大数据创业、大数据技术与分析、大数据商业与应用的网站。分享大数据的干货教程和大数据应用案例,提供大数据分析工具和资料下载,解决大数据产业链上的创业、技术、分析、商业、应用等问题,为大数据产业链上的公司和数据行业从业人员提供支持与服务。
Python爬虫和情感分析简介的更多相关文章
- Python分词、情感分析工具——SnowNLP
本文内容主要参考GitHub:https://github.com/isnowfy/snownlp what's the SnowNLP SnowNLP是一个python写的类库,可以方便的处理中文文 ...
- Python 爬虫与HTTP协议简介
爬虫的实际例子: 搜索引擎(百度.谷歌.360搜索等). 伯乐在线. 惠惠购物助手. 数据分析与研究(数据冰山知乎专栏). 抢票软件等. 什么是网络爬虫: 通俗理解:爬虫是一个模拟人类请求网站行为的程 ...
- 用python做文本情感分析
情感分析就是分析一句话说得是很主观还是客观描述,分析这句话表达的是积极的情绪还是消极的情绪.原理比如这么一句话:“这手机的画面极好,操作也比较流畅.不过拍照真的太烂了!系统也不好.” ① 情感词 要分 ...
- python爬虫——词云分析最热门电影《后来的我们》
1 模块库使用说明 1.1 requests库 requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更 ...
- 吴裕雄--天生自然python学习笔记:python爬虫与网页分析
我们所抓取的网页源代码一般都是 HTML 格式的文件,只要研究明白 HTML 中 的标签( Tag )结构,就很容易进行解析并取得所需数据 . HTML 网页结构 HTML 网 页是由许多标签( Ta ...
- Keras下的文本情感分析简介。与MLP,RNN,LSTM模型下的文本情感测试
# coding: utf-8 # In[1]: import urllib.request import os import tarfile # In[2]: url="http://ai ...
- Python爬虫连载2-reponse\parse简介
一.reponse解析 urlopen的返回对象 (1)geturl:返回网页地址 (2)info:请求反馈对象的meta信息 (3)getcode:返回的http code from urllib ...
- 【Python情感分析】用python情感分析李子柒频道视频热门评论
一.事件背景 今天是2021.12.2日,距离李子柒断更已经4个多月了,这是我在YouTube李子柒油管频道上,观看李子柒2021年7月14日上传的最后一条视频,我录制了视频下方的来自全世界各国网友的 ...
- 【转】用python实现简单的文本情感分析
import jieba import numpy as np # 打开词典文件,返回列表 def open_dict(Dict='hahah',path = r'/Users/zhangzhengh ...
随机推荐
- Class<Object>与Class<?>有何区别呢
1.? 和 Object 差不多,不过还是有差别.在这种情况下: class<? extends SomeClass> , Object就不能用了 Object是一个具体的类名,而?是一个 ...
- Facebook SDK
<?php session_start(); header('Content-type:text/html; charset=UTF-8'); require_once './facebook- ...
- Android源代码编译——下载
下了好久的源代码,真真是慢哈.真希望国内有公司能够把镜像开放出来. 不多说,首先是系统环境,我的系统是Ubuntu 64位系统(14.04), 版本应该没什么. 需要的库 Git: 没话说必须, su ...
- vb6-很简单的配置密码验证提示
'很简单的配置密码验证提示 Dim add As String add = Trim(InputBox("请输入配置密码", "报表配置")) If add = ...
- Beaglebone Back学习五(PWM测试)
PWM测试 参考链接 1 Enable PWM on BeagleBone with Device Tree overlays 2Using PWM on the Beaglebone Black 3 ...
- mac 下 sphinx + mysql + php 实现全文搜索(xampp)(1)
原理: 使用sphinx 中的indexer 生成索引数据 service/web 端 利用searched 调用索引数据 步骤: 下载 sphinx: 下载地址:http://sphinxsea ...
- php-fpm.conf 文件详解
pid string PID文件的位置. 默认为空. error_log string 错误日志的位置. 默认: 安装路径#INSTALL_PREFIX#/log/php-fpm.log. log_l ...
- UML include、generalization、extend、association
1.别人的说法 转自:http://www.cnblogs.com/shinings/archive/2009/04/21/1440765.html 共性:都是从现有的用例中抽取出公共的那部分信息,作 ...
- 【android-cocos2d-X iconv.h】在android下使用iconv
(1) 下载文件 首先下载iconv文件 下载地址:http://download.csdn.net/detail/dingkun520wy/6703113 把解压后的iconv文件夹放到cocos ...
- dive into python 读笔(1)
chapter2 and 3: 使用Python IDE来交互式地测试表达式 编写Python程序并且从IDE运行,或者从命令行运行 导入模块及调用它们的函数 声明函数以及doc string.局部变 ...