刘硕和关昕随着技术进步,定量分析方法,不再仅仅通过问卷、二手数据库等方式收集数据,不再仅仅通过数理统计、回归分析等手段分析数据。针对不同的研究需要,越来越多的新方法、新工具产生出来:
例如,以元胞自动机为代表的生命体建模技术、以马尔可夫链蒙特卡罗(MCMC)算法为代表的计算机仿真模拟技术等等。
本期介绍使用爬虫技术抓取网页,及对获取的网页文本数据做后续分析的实战案例。我将以网友对《流浪地球》豆瓣影评文本的获取与分析全过程,作为演示案例。
文本挖掘的本质是,通过自然语言处理(Natural Language Processing,NLP)和分析方法,将文本为数据进行分析。因此,阅读本文,需要一定的知识基础,包括网页设计、自然语言处理方法,我会在文中适当补充。
分析工作之前,需要为软件配置工作,包括设置工作目录、调用需要的程序包等等。采集到的文本数据、各类词典、输出结果等等都会保存在工作目录中;外部程序包在首次使用前需要安装。
我依然按照定量分析的传统套,将分析全过程分为数据收集与数据分析两部分。第一步,即通过爬虫技术抓取网页。
网络爬虫(webcrawler),也称网络蜘蛛(spider),是一种用自动浏览万维网的网络机器人。其目的一般为编纂网络索引。爬虫访问网站的过程会消耗目标系统资源,不少网络系统并不默许爬虫工作。因此在访问大量页面时,爬虫需要考虑到规划、负载,还需要讲“礼貌”。不愿意被爬虫访问、被爬虫主人知晓的公开站点可以使用robots.txt文件等方法避免访问。
在实际应用中,网络爬虫技术没有特别复杂。许多情况下,我们往往指定网站及抓取内容,更倾向于网页采集而非网络爬虫。在此之前,我希望读者了解网页源代码的有关知识,特别是标记语言(HTML,只有语法,没有变量和逻辑)、层叠样式表(CSS,用于控制元素的展现形式)、脚本语言(Java,操作HTML中元素的增删改)在网页设计中的作用。
另外,当网页出现较复杂的展现形式时,例如,网址分页、超链接、异步加载等等,需要读者具备更多的理论知识。
以上是本期抓取网页文本数据的代码。我抓取了220条豆瓣电影网站上,网友对《流浪地球》的好评文本,保存为“好评.csv”文件。HTTP error 403报错不影响结果,意思是从R中进入网页被识别为爬虫,访问更多,受不能抓取全部评论:
中文自动分词,指的是使用计算机自动对中文文本进行词语的切分,即像英文那样使得中文句子中的词之间有空格以标识。中文自动分词被认为是中文自然语言处理中的一个最基本的环节。
特别注意,用户自定义词典及停用词表,需要放置在工作径下,且以UTF-8编码格式的txt文本文件保存。习惯上,第一行可以空出:
用户自定义词典是防止固定词汇被拆开,例如,如果不设置自定义词典,“漫游太空2001”就会被拆分为“漫游”、“太空”、“2001”三个词语;“韩朵朵”就会被拆分为“韩”、“朵朵”两个词语;这会给我们的后续分析带来麻烦。
过滤停用词表,是将中文文本中,我们不需要的虚词等等删掉,例如,“啊”、“呀”、“吗”等单字,“应该”、“都是”等无关紧要的词,英文字母,标点符号及阿拉伯数字等等。
对不同的研究问题,用户自定义词典及停用词表,不是每次分析都一样的,需要我们根据不同问题的需要,不断地调整和修改。下面是使用用户自定义词典及停用词表后,部分文本的分词效果:
利用文档-词频矩阵(document-term matrix,DTM),可以实现文本数据的结构化。DTM矩阵转置后即为TDM,DTM矩阵的形式是,矩阵的行代表文档,列代表词汇,矩阵元素即为文档中某一词汇出现的次数。
特别注意:需要先用Excel打开“好评.csv”文件,通过“审阅-繁转简”将所有繁体字转换为简体字,否则构建文档矩阵时会报错;构建文档-词频矩阵,是进行后续分析的基础:
共现分析利用词汇共同出现的情况,定量地研究文本关系。由此,统计一组词汇两两之间在同一文本中出现的频率,便可形成一个由这些词对关联所组成的共词网络,网络内节点之间的远近便可反映内容的亲疏关系。
我以与“硬核科幻”一词0.5关系及以上的词汇结果为例,发现“硬核科幻”一词与情节、瑰丽、热血、社会秩序、低成本、完成度、、全人类等词共现关系较强:
聚类分析是研究分类问题的一种统计分析方法,同时也是数据挖掘的重要算法。聚类(Cluster)分析是由若干模式(Pattern)组成的,通常,模式是一个度量(Measurement)的向量,或者是空间中的一个点。聚类分析以相似性为基础,在一个聚类中的模式之间比不在同一聚类中的模式之间具有更多的相似性。
稀疏矩阵对于分类预测的系统效率和预测准确率有着负面的影响,因此需要对该词频矩阵进行降维处理,删除稀疏词条。
以上使用余弦相似度算法。通过测量两个向量夹角的余弦值,度量它们之间的相似性。0度角的余弦值是1,而其他任何角度的余弦值都不大于1;并且其最小值是-1;从而两个向量之间的角度的余弦值确定两个向量是否大致指向相同的方向。
结果是与向量的长度无关的,仅仅与向量的指向方向相关。余弦相似度通常用于正空间,因此给出的值为0到1之间。例如在信息检索中,每个词项被赋予不同的维度,而一个文档由一个向量表示,其各个维度上的值对应于该词项在文档中出现的频率。余弦相似度因此可以给出两篇文档在其主题方面的相似度。
我分别使用k=5及k=10时的结果做比较,220条评论数量之多,使树状图略显杂乱,不过聚类报告十分清楚,下图即为k=5时,220条评论文本的聚类结果:
主题模型(Topic Model)在机器学习和自然语言处理等领域,用来在一系列文档中发现抽象主题的一种统计模型。直观来讲,如果一篇文章有一个中心思想,那么一些特定词语会更频繁的出现。比方说,如果一篇文章是在讲狗的,那“狗”和“骨头”等词出现的频率会高些;如果一篇文章是在讲猫的,那“猫”和“鱼”等词出现的频率会高些。而有些词例如“这个”、“和”大概在两篇文章中出现的频率会大致相等。
但真实的情况是,一篇文章通常包含多种主题,而且每个主题所占比例各不相同。因此,如果一篇文章10%和猫有关,90%和狗有关,那么和狗相关的关键字出现的次数大概会是和猫相关的关键字出现次数的9倍。一个主题模型试图用数学框架来体现文档的这种特点。主题模型自动分析每个文档,统计文档内的词语,根据统计的信息来断定当前文档含有哪些主题,以及每个主题所占的比例各为多少。
文本情感分析,也称为意见挖掘,是指用自然语言处理、文本挖掘以及计算机语言学等方法来识别和提取原素材中的主观信息。
通常来说,情感分析的目的是为了找出说话者/作者在某些话题上或者针对一个文本两极的观点的态度。这个态度或许是他或她的个人判断或是评估,也许是他当时的情感状态(就是说,作者在做出这个言论时的情绪状态),或是作者有意向的情感交流(就是作者想要读者所体验的情绪)。
文本情感分析的一个基本步骤是对文本中的某段已知文字的两极性进行分类,这个分类可能是在句子级、功能级。分类的作用就是判断出此文字中表述的观点是积极的、消极的、还是中性的情绪。更高级的“超出两极性”的情感分析还会寻找更复杂的情绪状态,比如“生气”、“悲伤”、“快乐”等等:
现有的文本情感分析的途径大致可以集合成四类:关键词识别、词汇关联、统计方法和概念级技术。工具包括机器学习、情感词典等方法,这里使用基于词典的情感分析方法,我已把常用的中文情感词典放进下载资源中,关注“阿虎定量笔记”号,后台回复“情感词典”即可获得:
特别有趣的是,在众多乐观评价中,一条得分为-3分的悲观评价很有趣:“一个悲伤的故事:太阳都要,地球都要流浪了,我国的校服还是这么丑......”,哈哈哈哈哈哈:
词云(Word Cloud),又称文字云,是文本数据的视觉表示,由词汇组成类似云的彩色图形,用于展示大量文本数据。通常用于描述网站上的关键字元数据(标签),或可视化格式文本。每个词的重要性以字体大小或颜色显示。词云常用来快速最突出的文字:
网友评论 ()条 查看