请选择 进入手机版 | 继续访问电脑版
楼主: 铿锵绿色
6739 1

[程序分享] 用R语言做词云图等文字挖掘 [推广有奖]

副教授

83%

还不是VIP/贵宾

-

威望
0
论坛币
11004 个
通用积分
192.0299
学术水平
113 点
热心指数
142 点
信用等级
103 点
经验
15139 点
帖子
460
精华
0
在线时间
1513 小时
注册时间
2014-4-28
最后登录
2024-4-16

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

用R语言做词云图首先要进行分词,R中有两个包Rwrodseg和jiebaR包可以实现分词,仔细对比两个包可以发现jieba包做的更好,功能函数要多一些。这里我们以红楼梦文本为例,进行文本分析。本文实现三个部分任务:


  •        Part 1:以红楼梦110回为例,做词云图;
  •        Part 2:统计介词和助词频率;
  •        Part 3:统计指定词频率。

       首先,我们把红楼梦文本数据读取进入R里面,使用scan函数读取,并结合正则表达式分章节,最后用sapply函数分开文本:
  1. rm(list = ls())
  2. file.data <- scan("hongloumeng.txt", sep = "\n", what = "")
  3. chapter <- grep(pattern = "第.+回 ", file.data)
  4. txt <- sapply(seq_along(chapter), function(i) {
  5.   if (i < length(chapter)) {
  6.     paste(file.data[chapter[i]:(chapter[i + 1] - 1)], collapse = "")
  7.   } else {
  8.     paste(file.data[chapter[i]:length(file.data)], collapse = "")
  9.   }
  10. })
复制代码
      接下来完成Part1部分:
  1. #### 以第110回为例,用txt[[110]]表示即可

  2. library(jiebaR)
  3. ## PART 1:实词词云图
  4. cutter <- worker(stop_word = "stop_word.txt")
  5. # 添加新词,如贾宝玉等
  6. new_user_word(cutter, "贾宝玉")
  7. # 分词
  8. segwords <- segment(txt[[110]], cutter)
  9. # 字符大于1
  10. segwords <- segwords[which(nchar(segwords) > 1)]
  11. # filter words
  12. segwords <- filter_segment(input = segwords, filter_words = "一个")
  13. # frequency
  14. fq <- freq(segwords)
  15. fq <- fq[order(fq$freq, decreasing = TRUE), ]
  16. fq[1:100, ]
  17. fq <- fq[1:500, ]
  18. library(wordcloud2)
  19. wordcloud2(fq[1:300, ], size = 0.5, minSize = 0,  shape = "star", ellipticity = 0.85)
复制代码
     效果图如下:
Snipaste_2018-05-08_20-02-33.png

      Part 2部分代码如下:
  1. ## PART 2: 虚词词频率统计
  2. cutter2 <- worker("tag")
  3. classfication <- cutter2 <= txt[[110]]
  4. # u表示助词,p表示介词等,参考https://wenku.baidu.com/view/a093f16ab84ae45c3b358c8c.html
  5. mywords <- c("u", "p")
  6. xuci <- classfication[which(names(classfication) %in% mywords)]
  7. myfreq <- freq(xuci)
  8. myfreq <- myfreq[order(-myfreq$freq), ]
  9. myfreq
复制代码
    Part 2部分结果为(左边第一列为行序号):
  1.      char freq
复制代码


      Part 3部分代码如下:
  1. ## PART 3: 指定虚词为"之", "其", "或"
  2. cutter3 <- worker("tag")
  3. classification <- cutter3 <= txt[[110]]
  4. mywords2 <- classification[which(unname(classification) %in% c("之", "其", "或"))]
  5. freq(mywords2)
  6. help(package = "jiebaR")
复制代码
     结果为
  1. char freq
  2. 1   或    3
  3. 2   之    6
  4. 3   其    4
复制代码
      以上就是一个简单的词云图例子。
                                                                                           R语言爱好者 大珞珞
                                                                                             2018年5月8日

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


代码中数据文件请前往QQ群(538911602)下载!!!

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-18 17:32