【新技能】将Python爬虫和情感分析结合起来,更快上手更快理解

news/2024/11/7 22:47:15/

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

以下文章来源于腾讯云 作者:Python之道

( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载!还有海量最新2020python学习资料。 )
在这里插入图片描述

这篇短文的目的是分享我这几天里从头开始学习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)”方法

  1. 在item类里想要抓取的内容

  2. 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试图抓取词语间的顺序和依赖系,尽可能减少语义的流失

Via: zhihu


http://www.ppmy.cn/news/665812.html

相关文章

Android可折叠标题栏实现|RecyclerView吸顶列表实现|CollapsingToolbarLayout折叠布局用法

篇章目标要点 此前看到一些app有着炫酷的可折叠的UI,心里想着如果哪一天我也可以自己动手实现这些美观的UI就好了。偶然中发现了安卓提供的Material Design的妙用,决定动手实现向往已久的可折叠标题栏。本文的主要是讲述Material Design组件中的Collaps…

PaddleHub人像分割模型:AI人像抠图及图像合成

点击上方“AI搞事情”关注我们 本项目根据DeepLabv3模型一键抠图示例,主要采用PaddleHub DeepLabv3模型(deeplabv3p_xception65_humanseg)和python图像处理库opencv、PIL等完成。在最新作中,作者通过encoder-decoder进行多尺度信息的融合,同时…

python爬取豆瓣影评生成词云的课程设计报告_Python爬取豆瓣影评,生成词云图,只要简单一步即可实现。...

最近看了一部电影《绣春刀》,里面的剧情感觉还不错,本文爬取的是绣春刀电影的豆瓣影评,1000个用户的短评,共5W多字。用jieba分词,对词语的出现频率进行统计,再通过wordcloud生成词云图。 今天和小伙伴们一起梳理下具体实现的流程,具体源代码已经上传到NLP小白 公众号中,…

飞鱼服 绣春刀

雨下个不停…… 下雨天音乐和什么更配? 作为东方华夏族的一名地道土著,九叔认为绝对不是小棋棋说的德芙巧克力,那是毛子的口味。 下雨天和音乐更配的必须是读书,特别是对阅读习惯据说已经连印度都不如的国人来说,下雨…

VIM编辑器的命令使用总结

(该图由AI绘制 关注我 学习AI画图) 目录 一、VIM编辑器 1、vi概述 2、vim编辑器 3、vim编辑器的安装 4、vim编辑器的四种模式(重点) ☆ 命令模式 ☆ 编辑模式或输入模式 ☆ 末行模式 ☆ 可视化模式(了解&am…

conda 根目录内存满,更换新的目录

默认conda环境是在根目录,只需修改默认的目录即可 1 修改.condarc文件 vim ~/.condarc# 添加一行即可 envs_dirs:- /disk3/miniconda_envs/envs2 验证 创建一个conda环境 查看创建的路径 conda env list 这样以后都换把相关创建的包安装在disk3下,缓…

劲爆!366API免费提供微信如何打开网页下载APP

微信内无法直接下载app或者其他文件,是因为微信会拦截含下载文件的链接。很多朋友包括我自己想分享app下载地址的时候都会遇到这个问题,故特地跑去找各种解决方案,最终锁定了一个方便快捷的方法,那就是用在线api接口一键实现微信跳…

python编程 迷你世界_迷你世界迷你编程下载

迷你世界迷你编程是一款图形化编程软件,可以帮助青少年学习基础的编程知识,提高逻辑思维能力,迷你世界迷你编程还能让用户直观的感受到编程效果,对编程产生兴趣。 基本简介 迷你世界迷你编程官方版是三维图形化编程软件&#xff…