本项目ITA的一个大数据学习的项目,以下是我的大体思路。
第一部分是准备数据,随机爬取50w左右的微博用户,然后每天爬取他们前一天发布的微博作为本项目的数据源。
爬取用户信息采用递归的方式,随机以某个用户为起点,然后爬取该用户的关注和粉丝,然后递归地爬取关注和粉丝的信息。只需要得到用户名、用户ID即可。
由于新浪微博对爬虫有限制,因此爬取用户微博的时候采用定时器的方式。
由于只有登录了才能获取某个用户的个人信息和关注粉丝信息,而微博爬虫的难点就在于用户登录。
使用HttpFox抓取登录时候的http请求,发现微博登录分为两部分,第一部分是预登陆,第二部分是登录,需要传递用户名、密码等信息。使用 request 模拟这个登录过程。
抓取一定的用户后,每天定时爬取这些用户前一天发布的微博。使用cheerio 对返回的页面信息进行解析。
解析页面是一个难度不大,但是非常繁琐的过程,因为微博页面中有很多「无用」的Dom元素,比如广告啊,热门话题啊,还有好友动态之类的跟本项目完全无关。于是使用正则表达式先把关键信息提取,再使用cheerio解析,速度可以接受。
中途遇到一个问题,就是有时候拿不到数据,分析原因可能有三种: 1. 网络原因 2. 可能是新浪限制 3. 关注和粉丝不一定是“人”
采用的解决方案: 1. 对抓取微博失败的,Retry 5次 2. 放弃非人类
什么是非人类呢?我在抓取一个人的关注列表的时候发现
原来「北京」并不是一个用户,而是一个话题,打开「北京」页面发现它的Dom结构与普通用户的Dom结构并不相同,于是果断放弃非人类。
分词就是把一句话变成一个一个单词的过程。举个栗子吧: 我是中国人。 我 - 是 - 中国 - 人
前几天锤子M1/M1L发布会上最大的亮点就是这个Big Bang功能,让手机端对文字地操作更进一步。
国务院总理李克强调研上海外高桥时提出,支持上海积极探索新机制。
本项目采用语言技术平台(Language Technology Platform,LTP) 语言技术平台是哈工大社会计算与信息检索研究中心历时十年研制的一整套开放中文自然语言处理系统。
使用方式有两种,Get和Post。本项目采用Post的方式:
var url = 'http://api.ltp-cloud.com/analysis/';
var param = {
'api_key': '***',
'pattern': 'ws',
'text': '我是中国人'
'format': 'plain'
};
Request.post(url, {form: param}, callback);
callback 里面会传回来分词后的结果。
情绪分析是将一个词语分出词性种类、情感类别、情感强度及极性,国外比较有影响的Ekman的6大类情感分类。
比如:
大连理工大学林鸿飞教授带领全体教研室成员整理而成的「情感词汇本体库」,是目前最权威的中文情绪词典,共含有情感词共计27466个。
下图是一些示例:
真正想要解决情绪分析还是要靠机器学习和人工智能。 Google于2016年5月13号开源自然语言理解技术SyntaxNet,并且支持中文。