词云分析

Reads: 2004 Edit

1 政府工作报告的词云分析

1.1 数据

从网上复制2021年政府工作报告到txt文件(由于R读取word文档需要安装新的库,比较麻烦,所以存储到了txt文件)。

r-107

1.2 分词

1.2.1 导入数据

> install.packages("Rwordseg")
> library(rJava)
> report=read.table("D:/Desktop/report.txt")
> class(report)
[1] "data.frame"
> report=as.character(report)
> report
[1] "c(\"政府工作报告\", \"——2021年3月5日在第十三届全国人民代表大会第四次会议上\", \"国务院总理 李克强\", \"各位代表:\", \"现在,我代表国务院,向大会报告政府工作,请予审议,并请全国政协委员提出意见。\", \"  一、2020年工作回顾\", \"过去一年,在新中国历史上极不平凡。面对突如其来的新冠肺炎疫情......

1.2.2 使用segmentCN()函数进行分词

> segmentCN("这里输入需要进行分词的句子或者段落")
 [1] "这里" "输入" "需要" "进行" "分词" "的"   "句子" "或者" "段"   "落"  
> segmentCN("这里输入需要进行分词的句子或者段落",returnType='tm')
[1] "这里 输入 需要 进行 分词 的 句子 或者 段 落" 

> segmentCN(c("这里输入需要进行分词的句子或者段落","输入第二句话来构成向量"))
[[1]]
 [1] "这里" "输入" "需要" "进行" "分词" "的"   "句子" "或者" "段"   "落"  

[[2]]
[1] "输入" "第二" "句"   "话来" "构成" "向量"

说明:1.segmentCN()函数默认返回中文词汇的向量。2.如果加上returnType='tm'参数后,将返回用空格隔开的一个字符串。3.如果输入是一个字符串向量,那么将返回一个列表,列表中每个项目都是一个词汇的向量。

> words=segmentCN(as.character(report))
> df_words = as.data.frame(table(words))
> head(df_words)
  words Freq
1     1    7
2    10    4
3   100    5
4  1000    1
5    11    1
6  1100    1

说明:第一列是词汇,第2列是出现的频率,这里前6个词汇都是数字!这里是因为没有去除停用词导致的。

1.3 绘制词云

> library(wordcloud2)
> wordcloud2(df_words, size =1, fontFamily = "微软雅黑",color = "random-light", backgroundColor = "grey",shape = 'circle')

说明:默认的词云形状是椭圆,但是由于size太大,所以没有绘制成椭圆形。

r-108

> wordcloud2(df_words, size =0.3, fontFamily = "微软雅黑",color = "random-light", backgroundColor = "white",shape = 'circle')

r-109

2 网购评价的词云

2.1 爬取京东商品的评论数据(动态网页)

安装并加载RCurl包

> install.packages('RCurl')
> library(RCurl)
> library(tidyverse)           #处理字符串    

定义该网页的网址

注意:网页评论的地址并不是商品网页的地址,需要采用如下形式获取网址信息。

第一步:打开浏览器的“检查元素”功能,切换到network选项。

r-104

第二步:刷新整个商品网页

第三步:点击页面上的商品评价按钮

r-105

第四步:点击“检查元素”工具栏以“productPageComments...”开头的条目(这一步不同购物网站不一样,需要尝试、摸索、寻找)。右侧的Request URL就是商品评价的网络地址信息。

r-106

> url='https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId=100031406046&score=0&sortType=5&page=0&pageSize=10&isShadowSku=0&fold=1'

说明:该网址中有“fetchJSON”的字样,因而其请求的不是html的网页内容,而是JSON数据文件(JSON是存放数据的一种文件格式)。

getURL()函数请求数据信息

> web=getURL(url,.encoding='GBK')

说明:这里是GBK的编码格式。

将getURL()获取的数据转换为标准的JSON格式

> web=substr(web,nchar("fetchJSON_comment98")+2,nchar(web)-2)
> JSONData=jsonlite::fromJSON(web)

说明:"fetchJSON_comment98"来自网址的内容。JSONData就是包含最终获取的评论信息的变量。

获取商品评价数据:

> comment=JSONData$comments$content %>% str_remove_all("\\n") %>% str_remove_all(" ")

2.2 对评论数据进行分词

> cmt=segmentCN(as.character(comment))
> cmt=unlist(cmt)
> df_cmt = as.data.frame(table(cmt))
> head(df_cmt)
    cmt Freq
1    11    1
2    12    1
3   120    1
4  120w    3
5  120W    1
6 12pro    1

2.3 绘制词云

> wordcloud2(df_cmt, size =0.3, fontFamily = "微软雅黑",color = "random-light", backgroundColor = "white",shape = 'circle')

r-110



获取案例数据,请关注微信公众号并回复:R_dt16


Comments

Make a comment