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

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

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

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

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

那么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 条评论
登录 后参与评论

相关文章

来自专栏机器之心

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

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

1404
来自专栏PPV课数据科学社区

【译文】怎样学习R(下)

何品言翻译,广东科技学院大学生,喜欢R语言和数据科学。 王陆勤审核,从事数据挖掘工作,专注机器学习研究与应用。 英文链接:http://www.r-blogge...

2964
来自专栏云计算D1net

Autopilot浮现 微软的云计算密钥

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

4056
来自专栏企鹅号快讯

用python爬取自己的朋友圈,得到的信息超过你的想象!

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

57310
来自专栏新智元

专家点评 | 【Google 年度顶级论文】机器学习系统,隐藏多少技术债?

作者在看完新智元12月8日文章《【Google 年度顶级论文】机器学习系统,隐藏多少技术债?》后有感而发,特作此文。 我: 真的好文。象牙塔里出不来的经验总结。...

3316
来自专栏大数据文摘

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

1648
来自专栏灯塔大数据

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

最近几天干啥都不来劲,昨晚偶然了解到 Python 里的 itchat 包,它已经完成了 wechat 的个人账号 API 接口,使爬取个人微信信息更加方便。...

4265
来自专栏CDA数据分析师

为什么75%的数据科学家使用R做数据分析?

作者   CDA 数据分析师 数据科学家被认为是21世纪最性感也是最具发展前景的职业,目前有75%左右的数据科学家使用R语言,有35%左右的数据科学家将R语言作...

2759
来自专栏Java技术栈

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

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

1012
来自专栏HansBug's Lab

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

1173

扫码关注云+社区

领取腾讯云代金券