突然有一个大胆的想法,提前分享给大家

也是由于前段时间工作中遇到一个很小文本分析的需求,虽然最后不了了之了,但是却勾起来自己对文本分析的极大兴趣。

一方面由于文本数据清洗的挑战与结构化数据相比能够更加锻炼数据清洗能力;另一方面,从文本中挖掘出来具有决策价值的信息,这种过程本就很考验耐心和毅力,而且过程较之其他数据挖掘类型,所面对的挑战性和不确定性更高、难度更大。

最近偶然在国务院官网上看到了一个页面,保存了新中国成立后历年的国务院政府工作报告(除少数几年缺失,原因不详),真是踏破铁鞋无觅处、得来全不费工夫。

政府工作报告的意义相信大家都心里有数,几乎代表着一整年政府工作的重心和方向,涉及到社会民生、经济文化等方方面面。

那么1954~2018年,见证中华人民共和国建国70多年的历届政府工作报告,其内容的变化、关注的侧重点、核心理念、政策导向又有着怎样的规律与洞见呢~

这个话题确实有点儿过于宽泛了,无论是内容数量还是分析角度等都可以拆解出来相当多的维度,相信每个人都可以从中挖掘出自己的见解~

说实话我还没有构思出令自己满意的分析计划,主要我自己在挖掘算法上面的积淀太少,很多东西正在恶补,希望能趁着这个机会融会贯通一下自己之前所学。

由于体量较大,打算从长计议,计划做成一个在线的开源小项目,放在github上接受大家的建议,等内容充实了,再用shiny和ggplot2去搭建线上展板。

1、数据获取(DONE) 2、语料清洗 3、分词与词干提取 4、词频统计与探索性分析 4、构建词向量 5、训练语料 6、筛选模型 7、测试模型 8、构建可视化线上展板

目前只完成了第一步(第一步就敢拿出来晒 ~ 就是这么任性)

内容规划和分析维度还在计划中,但是数据已经到位了,后期的清洗任务无比艰巨,等每一个步骤有阶段性成果,会及时公众号更新,不过你可以随时关注我的github,我会定期同步每一步的进展。

所有的数据源、代码及相关资料均为同步在github仓库的对应项目中。

今天只分享数据获取的代码,为了显得项目规范性(其实就是装X),我第一次使用了Rstudio中的Create Projects菜单创建了本地项目仓库(以前写R代码太飘逸了,写的龙飞凤舞,完全不顾及别人能不能看懂,以后不可以这样了,因为工作中已经吃过很大亏了)。

抓取历届政府工作报告的主网址:

http://www.gov.cn/guowuyuan/baogao.htm

因为是含有二级列表页,所以第一步的想法自然是先爬取年份链接,然后遍历链接抓取每一年份中的文档。

可能因为自己文科生思维的问题,不太习惯直接写双层for循环(因为看到会不适),所以遇到这种需要二次遍历的,我一般都会拆成两个小步骤去进行:

1、遍历年份对应的对应年政府工作报告主页链接:

## !/user/bin/env RStudio 1.1.423
## -*- coding: utf-8 -*-
## Pages_links Acquisition
## 加载必要的安装包:
library("rvest")
library("stringr")
library("Rwordseg")
library("wordcloud2")
library("dplyr")
#主网址
url <- "http://www.gov.cn/guowuyuan/baogao.htm"
#提取二级链接
txt<-read_html(url) %>% 
     html_nodes("#history_report") %>% 
     html_nodes("p") %>% 
     html_text()
#提取年份&链接信息:
Base <- read_html(url) %>% html_nodes("div.history_report") %>% html_nodes("a")
Year  <- Base %>% html_text(trim = TRUE) %>% as.numeric()
Links <- Base %>% html_nodes("a") %>% html_attr("href") %>% str_trim("both")
#合并成数据框:

Reports_links <- data.frame(
  Year = Year,
  Links = Links,
  stringsAsFactors = FALSE
 )
#存放到本地目录中

if (!dir.exists("data")){
  dir.create("data")
  write.csv(
  Reports_links,  "./data/Reports_links.csv",
  row.names=FALSE
  )  
}

以上代码为了便于理解,我都拆成单句展示了,github中代码都会是封装好的模块化函数。

2、从每一个年份对应的链接中获取整个政府工作报告的文档文本:

#加载包

library("rvest")
library("dplyr")
library("magrittr")
library("doParallel")      
library("foreach")
#读取年份及对应链接

Links_data <- read.csv("./data/Reports_links.csv",stringsAsFactors = FALSE) %>% arrange(Year)
#创建文档提取函数:

Get_Corpus_Report <- function(i){
  url = grep(i,Links_data$Year) %>% Links_data$Links[.]
  read_html(url) %>% 
    html_nodes("td.p1,tr > td,div.pages_content") %>% 
    html_text("both") %>% 
    cat(file = sprintf("./data/Corpus/%d.txt",i))
  }

以上需用到较为基础的CSS表达式配色rvest来提取文档,如果你还不太了解这块的内容,赶快通过菜单中的网络数据获取笔记来恶补。

没有构造循环,这里用了foreach包提供的多进程并行爬取方案来处理多循环问题(虽然这里的量级还体现不出来并行的优势,但是整体代码要比写循环简介、高效)

system.time({
  if (!dir.exists("./data/Corpus")){
    dir.create("./data/Corpus")
  } 
  cl<- makeCluster(4)      
  registerDoParallel(cl)    
  tryCatch({ 
    foreach(
      i= Links_data$Year,  
      .combine = c,
      .packages = c("rvest","magrittr")
    ) %dopar% Get_Corpus_Report(i)
  },  error = function(e) {
    print(e)
  }, 
  finally = stopCluster(cl)
  )
})

到这里,数据获取工作完毕,看不是很简单呀,短短不过20行代码,五六十份整齐的政府工作报告(txt格式)就怪怪的躺在你的硬盘里啦~

这里重复一遍,我会把所有的数据源、代码、及每一步的成果都更新到github上面,欢迎NLP的各位大神指(拯)导(救)思(下)路(我)~

也非常欢迎大家能够拿着这些宝贵的语料(真的很宝贵),做一些自己喜欢的事情~然后一起分享成果~

https://github.com/ljtyduyu/Government_Report_Mining

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2018-06-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术栈

Elastic Search 上市了,市值翻倍,这群人财务自由了!

国庆长假,大部分人还深浸在风花雪月之中,而就在昨天(美国时间10月5号),我们 Java 程序员所熟知的大名鼎鼎的 Elastic Search 居然在美国纽约...

892
来自专栏wataloo的试验田

MOBA英雄AI设计分享

英雄AI的设计原则是:优秀的AI并不要求是尽量的和人表现一致,也不是多么的精准和无懈可击,而是能够和玩家进行很好的交互,提升游戏体验。

1.1K21
来自专栏腾讯云数据库(TencentDB)

TDSQL参加全球数据库顶级盛会 VLDB 2018回顾

作者介绍:卞昊穹(hankbian):腾讯数据库TDSQL团队成员,高级工程师。中国人民大学博士,曾在SIGMOD、ICDE、CIKM等数据库相关领域顶级会议发...

5324
来自专栏大数据文摘

Science最新研究:AI通过追踪光标移动,线上勘破骗局

1608
来自专栏HansBug's Lab

【作业4.0】HansBug的第四次面向对象课程思考

1143
来自专栏CDA数据分析师

如何用 Python 爬取自己的微信朋友

微信作为一款拥有将近9亿用户的超级APP,已经成为很多人生活中不可或缺的一部分,聊天、分享动态、阅读资讯、购物支付……微信就像一张移动互联网的身份证,拥有它就能...

2539
来自专栏华章科技

一件有趣的事:我用 Python 爬了爬自己的微信朋友

安装完成后导入包,再登陆自己的微信。过程中会生产一个登陆二维码,扫码之后即可登陆。登陆成功后,把自己好友的相关信息爬下来。

993
来自专栏机器之心

前沿 | 小心!现在,机器人可以控制你了

远距临场机器人通过一个装有摄像头的机器人可以查看遥远的地点。它具有广泛的实际应用,如在军事和太空研究中的应用。市面上的大部分远距临场机器人(telepresen...

1324
来自专栏腾讯社交用户体验设计

AR狗年萌宠设定

1525
来自专栏云计算D1net

Autopilot浮现 微软的云计算密钥

作为微软首席执行官,萨蒂亚·纳德拉可能还是位初来乍到的新人,但他对于该公司的关键性内部工具以及与Amazon及谷歌开展竞争的方案早已非常熟稔:这正是名为Auto...

3916

扫码关注云+社区