“两会”新闻分析框架已经完成两个多月了,一直没时间总结,这几天看了一下项目,发现很多东西都忘掉了,趁现在还记得一点东西,先写下部分内容,因为公司网络限制,不能贴代码和图片......
编程语言:
本项目中今日头条部分主要使用Python3,微博和微信爬虫主要使用Java。
相关技术:
今日头条部分直接请求search的API,返回的数据格式为JSON,获取头条search的数据主要流程如下:
打开Chrom控制台-->选择Network-->进入头条,搜索内容-->在Network中寻找相关的url-->获取URL中的Header中的URL,然后使用的时候重新拼接URL。
另外对于部分内容,直接使用Selenium模拟浏览器,直接抓去内容加载完毕后的html节点,这样做的好处是可以抓取任何内容,缺点是效率很低。
数据分析:
数据分析采用了编辑距离、奇异值分解、k-means、向量积、半监督学习等技术。
编辑距离:
编辑距离算法主要用来计算两个字符串之间的相似性。两个字符串A和B,通过增加、删除、修改其中的字符串,将A字符串变为B字符串,如果需要n操作,那么编辑距离为n。
奇异值分解:
首先感谢朱红军老师提供的思路和资料,这部分主要因为关键词太多,难以直接聚类分析,首先需要去掉一部分无关的数据。主要是将数据构建为一个原始矩阵k(大小m x n),得到<Key, Value1, Value2, ...>的List数据,key为关键词,value为每条新闻中出现的次数,列名为新闻ID。然后将矩阵k分为u,sigma,v三个矩阵。其中u矩阵大小为m x m;sigma矩阵为 m x n的矩阵,只有对角线有值; v 矩阵为 n x n的矩阵,通过sigma矩阵可以判断哪些关键词出现的频率最高,哪些出现的频率最低,将出现频率低的去掉,可以实现第一次降噪,输出<Key, Value1,Value2。。。>格式的List。
另外可以对数据进行多次奇异值分解,但是结果有点复杂难以做下一步的分析。
奇异值分解:http://www.cnblogs.com/bincoding/p/6922718.html
聚类分析:
这部分主要使用到网上的代码,通过奇异值分解之后的数据,可以确定每条新闻出现的每个关键词的次数。如果某两个关键词多次在一条新闻中出现,那么可以判断这两个关键词大概率相似,可以分为一类,比如“习大大"多次和"主席"出现在同一条新闻中,还有”去产能“多次和"煤矿"“钢铁”一起出现。数据量越大,结果越精确。
向量积:
这一部分主要原理是:通过判断每句话中词语出现的顺序和次数,来判断两句话是否相似。这部分算法主要采用网上的开源框架,但是因为时间关系并没有完全实现,只做一个简单的了解。
半监督学习:
通过向量积来判断两个值是否相等,结果可能并不正确,这个时候可以人为修正结果,对结果分类进行修改,数据量越大越准确。这部分队友使用Django框架实现,只做了解。
代码和数据: https://github.com/haibincoder/ToutiaoCrawler 奇异值分解和k-means算法在svd目录