从网页抓取视频(本期目录01网页抓取02中文分词03文档矩阵04共现05文本聚类)

优采云 发布时间: 2021-10-03 00:00

  从网页抓取视频(本期目录01网页抓取02中文分词03文档矩阵04共现05文本聚类)

  本期目录

  01

  网页抓取

  02

  中文分词

  03

  文档矩阵

  04

  词频共现

  05

  文本聚类

  06

  主题建模

  07

  情绪分析

  08

  词频统计

  09

  绘制词云

  失去

  随着科技的进步,定量分析方法不再仅仅通过问卷、二手数据库等方式采集数据,而不再仅仅通过数理统计、回归分析等手段来分析数据。针对不同的研究需求,产生了越来越多的新方法和新工具:

  例如,以元胞自动机为代表的生命体建模技术,以马尔可夫链蒙特卡罗(MCMC)算法为代表的计算机仿真技术等。

  本期介绍使用爬虫技术抓取网页的实际案例,并对获取的网页文本数据进行后续分析。我将用网友对《流浪地球》豆瓣影评正文的获取和分析全过程作为示范案例。

  文本挖掘的本质是通过自然语言处理(NLP)和分析方法将文本转化为数据进行分析。因此,阅读本文需要一定的知识基础,包括网页设计和自然语言处理方法,我会在文章中适当添加。

  ➡ 1.准备

  在分析工作之前,需要配置软件的工作环境,包括设置工作目录、调用所需的程序包等。采集接收到的文本数据、各种词典、输出结果等都会存放在工作目录中;首次使用前需要安装外部程序包。

  ###备工作#设置工作目录setwd('D:/流浪地球')#加载需要的包 library('rvest')library('stringr')library('jiebaRD')library('jiebaR') library('plyr')library('rJava')library('tm')library('tmcn')library('proxy')library('topicmodels')library('sqldf')library('wordcloud2')

  ➡ 2.网页抓取

  我仍然遵循定量分析的传统套路,将整个分析过程分为数据采集和数据分析两部分。第一步是通过爬虫技术抓取网页。

  网络爬虫,也称为蜘蛛,是一种自动浏览万维网的网络机器人。它的目的一般是编译一个网络索引。爬虫访问网站的过程会消耗目标系统资源,很多网络系统默认是不允许爬虫工作的。因此,在访问大量页面时,爬虫需要考虑规划、加载和“礼貌”。使用robots.txt文件和其他方法可以避免爬虫不愿意访问和爬虫所有者已知的公共站点。

  例如豆瓣电影()的robots.txt规定如下:

  用户代理:*Disallow:/subject_searchDisallow:/amazon_searchDisallow:/searchDisallow:/group/searchDisallow:/event/searchDisallow:/celebrities/searchDisallow:/location/drama/searchDisallow:/forum/Disallow:/new_subjectDisallow:/service/iframeDisallow : /j/Disallow: /link2/Disallow: /recommend/Disallow: /doubanapp/cardDisallow: /update/topic/Sitemap: Sitemap: #Crawl-delay: 5

  User-agent: 玩豆家 SpiderDisallow: /

  在实际应用中,网络爬虫技术并不是特别复杂。在很多情况下,我们倾向于指定网站并抓取内容,更喜欢网页采集而不是网络爬虫。在此之前,希望读者了解网页源代码的相关知识,尤其是标记语言(HTML,只有语法,没有变量和逻辑)、层叠样式表(CSS,用于控制元素的显示形式) )、脚本语言(Java、HTML中元素增删改查的操作)在网页设计中。

  另外,当网页以更复杂的表现形式出现时,如URL分页、超链接、异步加载等,需要读者有更多的理论知识。

  ###网页采集#observation URL pattern index #批量爬取好评数据评论为(i in index){#Read URL url = paste("",i,"&limit=20&sort=new_score&status=P&percent_type= h" ,sep="")web #爬取豆瓣赞词%html_nodes('#comments p')%>%html_text()#创建一个数据框存放上述信息comments_datacomments }#保存豆瓣赞为CSV文件写入。csv(评论,文件=“赞美.csv”,row.names=FALSE)

  以上是本期抓取网页文本数据的代码。我从豆瓣电影网站中抓取了220条网友为《流浪地球》点赞的文字,保存为“praise.csv”文件。HTTP错误403错误不影响结果,这意味着从R进入的网页被识别为爬虫,访问被拒绝更多,并且由于限制而无法爬取所有评论:

  

  一般纳税人公司注册费?价格透明,全程免费,中途不收取任何额外费用。

  图1:豆瓣电影网站截图

  

  注册一家公司需要多少钱?

  图2:截取的220条评论文本数据截图

  ➡ 3.中文分词

  中文自动分词是指使用计算机对中文文本进行自动分词,即中文句子中的单词之间有空格,以便像英文一样进行识别。中文自动分词被认为是中文自然语言处理中最基本的环节之一。

  许多教科书以英文文本作为教学案例,分词所用的程序包与处理中文文本时所用的程序包不同。读者需注意自学。

  ###中文分词#获取当前工作目录getwd()#设置自定义词典并停止词汇引擎#导入赞美文字good names(good)nchar(good)#文字预处理good_res = good[good!=" "]ls ()fix(good_res)#赞美文字切分good_segwords fix(good_segwords)#删除未过滤出停止词表过滤器的词 filter_segment(good_segwords, filter)fix(good_segwords)

  需要特别注意的是,用户自定义词典和停用词列表需要放在工作路径中,并保存为UTF-8编码格式的txt文本文件。传统上,第一行可以留空:

  

  广告精品课程值得信赖!名师*敏*感*词*指导,免费视频全真考,国家注册*敏*感*词*名师指导,轻松通过考试!

  图 3:我的用户定义词典和停用词列表的屏幕截图

  自定义词典是为了防止固定词汇被拆解。例如,如果不设置自定义词典,“漫游空间2001”将被拆分为三个词:“漫游”、“空间”和“2001”;“韩多”“多”将拆分为“韩”和“多”两个字;这会给我们后续的分析带来麻烦。

  过滤停用词列表就是删除我们在中文文本中不需要的虚词,例如“啊”、“啊”、“?” 以及其他词,“应该”、“是”等不相关的词、英文字母、标点符号和阿拉伯数字等。

  对于不同的研究问题,自定义词典和停用词表每次分析都是不一样的,需要根据不同问题的需要不断调整修改。以下是部分文本使用自定义词典和停用词表后的分词效果:

  

  图4:部分文字切分效果截图

  ➡ 4.文档矩阵

  使用文档术语矩阵 (DTM),可以构建文本数据。DTM矩阵是转置后的TDM。DTM矩阵的形式是矩阵的行代表文档,矩阵的​​列代表词,矩阵元素是某个词在文档中出现的次数。

  特别提示:需要先用Excel打开“Praise.csv”文件,使用“Review-Traditional to Simplified”将繁体字全部转为简体字,否则构建文档矩阵时会报错;文档-词频矩阵的构建是为了后续分析的基础:

  ###文档矩阵#创建好文本的DTM文件 good_corpus inspect(good_corpus[1:10])good_corpusctrlgood_dtminspect(good_dtm[1:10, 110:112])good_dtm

  ➡ 5. 词频共现

  共现分析利用词语的共现来定量研究文本关系。因此,通过统计一组词在同一文本中出现的频率,可以形成由这些词对关联组成的共同词网络,网络中节点之间的距离可以反映内容的接近程度。

  ###词词共现#以术语“硬核科幻”0.5关系及以上为例 findAssocs(good_dtm, "hard core sci-fi", 0.5)

  我以“硬核科幻”这个词0.5和上面的词汇结果为例,发现“硬核科幻”这个词和情节,气势磅礴,*敏*感*词*澎湃,社会秩序,低成本,完整,圆满词,例如,所有人类都有很强的共现关系:

  $硬核科幻剧情,低成本,气势磅礴,第一次,气势磅礴参考奇伟的血统人类学想象社会秩序0.94 0.87 0.87 0. 87 0.87 < @0.87 0.87 0.87 0.87 0.87 想不到新的起点,*敏*感*词*印象预告片,彻底的灾难,完整的世界和全人类0.87 0.87 0.87 0.87 0.87 0.87 < @0.85 0.71 0.57 0.55

  ➡ 6. 文本聚类

  聚类分析是研究分类问题的统计分析方法,也是数据挖掘的重要算法。聚类分析由几种模式组成。通常,模式是一个测量向量,或者是多维空间中的一个点。聚类分析基于相似性,一个聚类中的模式之间的相似性比不在同一聚类中的模式更多。

  ###文本聚类#删除稀疏矩阵 good_dtm_sub dim(good_dtm_sub)#好的文本聚类 good_dist heatmap(as.matrix(good_dist),labRow=FALSE, labCol=FALSE)good_clust plot(good_clust)result1result2summary(result1)@ >sum (result2)result1result2plot(good_clust)

  稀疏矩阵对分类预测系统的效率和预测精度有负面影响。因此,需要降低词频矩阵的维数,删除稀疏条目。

  上面使用的是余弦相似度算法。通过测量两个向量之间夹角的余弦,来测量它们之间的相似度。0度角的余弦值为1,其他任何角度的余弦值都不大于1;其最小值为-1;因此两个向量之间夹角的余弦值决定了这两个向量是否大致指向同一方向。

  结果与向量的长度无关,只与向量的方向有关。余弦相似度通常用在正空间,所以给定的值在0到1之间。 比如在信息检索中,每个term被赋予不同的维度,一个文档用一个向量表示,每个维度的值对应到文档中术语的频率。因此,余弦相似度可以给出两个文档在主题方面的相似度。

  我分别使用 k=5 和 k=10 时的结果进行比较。220条评论的数量让树状图有点乱,但是聚类报告非常清晰。下图显示了 k=5 时的 220 条评论。文本聚类结果:

  

  广告是秃头?别再用生姜洗头了,试试用生姜吧,稀疏的头发瞬间变得浓密

  图5:k=5时220条评论文本的聚类结果

  ➡ 7. 主题建模

<p>主题模型是一种统计模型,用于在机器学习和自然语言处理领域的一系列文档中发现抽象主题。直观来说,如果一篇文章文章有一个中心思想,那么一些特定的词就会出现得更频繁。例如,如果一篇文章是关于狗的,那么“狗”和“骨头”这两个词会出现得更频繁;如果一篇文章文章是关于猫的,那么“cat”和“fish”等词出现的频率会更高。一些词例如“this”和“he”在这两个

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线