首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从网络数据爬取到中文分词到词云个性化制作的一条龙服务

案例引入

假设你是一家出版社的职员,某日主编提出要求:“我需要你能呈现《斗罗大陆》的词汇大致分布,我不管你怎么实现,只要我能看懂就好。”

一说到词汇分布的呈现,很多人会想到利用词云(wordcloud),但是在本例中,经理并没有给我们相关的词汇分布数据,这就需要我们自己动手来获取或制作词汇的分布数据。本次实战我们将从最基本的网络数据爬取出发,结合中文分词来制作各式的词云图。

网络数据爬取

网路数据爬取方面,我们将利用rvest包,它可以快速、简单地爬取一个网页的信息。利用rvest爬取网络数据的一般步骤是:载入网页-获取html数据-根据html标签或者css选择器引用数据。

本次爬取的网站为http://www.biquge.info/10_10218/,其每一章节的网页url规律性较强,爬取代码如下:

library(rvest)

t

for (i in 1:50) {

id

url

web

position % html_nodes('div#content') %>% html_text()

t[i]

}

t_all

利用for语句组合斗罗大陆每一章节的url,再通过read_html()获取每一章节的html文档,如果对html标签语言有一些了解的话,可以发现

便是每一章节的文本内容。web %>% html_nodes('div#content') %>% html_text()是一个逐级处理过程,web指向网页html文本,html_nodes()获取web中指定标签的内容,html_text()则获取html_nodes()中的文本信息,也就是章节内容。最后利用paste将每一章节的内容粘在一起方便切词处理。

#"div#content"指向的是id="content"的div标签,如果是class属性,如

,则应为"p.p1"

#关于rvest更多内容,请访问https://github.com/hadley/rvest

中文切词

在中文分词领域,目前最好用的应该是jieba系列的分词工具了,其在R上也有支持的包"jiebaR"。利用jiebaR分词代码如下:

library(jiebaR)

seg

jieba_s

df

worker()函数是jiebaR中最重要的函数,它的作用是设定一个分词器,供后续切词使用。其中,参数type指定分词器使用的模型,目前的模型主要有:

mp(最大概率模型)- 基于词典和词频

hmm(HMM模型)- 基于HMM模型,可以发现词典中没有的词

mix(混合模型)- 先用mp分,mp分完调用 hmm 再来把剩余的可能成词的单字分出来。

query(索引模型)- mix 基础上,对大于一定长度的词再进行一次切分。

keywords(关键词模型)- tf-idf 抽关键词

#关于jiebaR更多内容,请访问https://github.com/qinwf/jiebaR

词云制作

目前较好用的词云包当wordcloud2莫属了,其支持三种不同的词云实现函数,分别如下:

library(wordcloud2)

wordcloud2(df, figPath='C:/Users/Ming/Desktop/唐.png', size=1, color='random-light')

wordcloud2(df, size=1, color=ifelse(df[, 2]>800, 'red', 'skyblue'), backgroundColor='grey', minRotation = -pi/6, maxRotation = -pi/6, minSize = 10, rotateRatio = 0.5, shape='star')

letterCloud(df, word='斗罗大陆', wordSize=5)

在第一个wordcloud2()中,df使用的数据集(即data=df),figPath参数指向一张图片,本次示例,我们使用的是一个“唐”字的图片(图片要求词云显示区域为黑色,其余区域为背景色,格式一般为png格式),size参数则是词云图中文字的大小(默认为1),color参数指定颜色。

第二个wordcloud2()中,我们利用ifelse()函数对color指定了一个颜色选择器,词频大于800的文本将显示为红色,其余则为淡蓝色,backgroundColor指定背景颜色,minRotation、maxRotation、rotateRatio一般同时使用,前两个分别指定某一个词发生旋转时,旋转的最小角度与最大角度,最后一个指定这个词发生旋转的概率,shape函数指定形状,可用的关键字例如circle(默认),cardioid,diamond,triangle-forward,triangle,pentagon,star。

letterCloud()可以很方便地利用某一个字符作为画布来生成词云,参数word指定作为画布的字符,wordSize指定该字符的大小。

#如果使用的开发环境为Rstudio,若无法生成图像,点击一次刷新即可。

#关于jiebaR更多内容,请访问https://cran.r-project.org/web/packages/wordcloud2/vignettes/wordcloud.html

源码与文档:https://pan.baidu.com/s/1aA70pee-y7mBKa45elmdbg

密码:2f62

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180516G1H7G900?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券