微博数据挖掘与分析算法的研究与实现_第1页
微博数据挖掘与分析算法的研究与实现_第2页
微博数据挖掘与分析算法的研究与实现_第3页
微博数据挖掘与分析算法的研究与实现_第4页
微博数据挖掘与分析算法的研究与实现_第5页
已阅读5页,还剩64页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章绪论1.1研究背景和意义互联网在这几年中正在进行这十分快速的发展,根据中国互联网网络信息中心发布的互联网统计报告来看,我国的网民数量在2012年已经达到了5.38亿人次。网民表现异常活跃,网络舆情汹涌澎湃,网络舆情安全已成为新的非传统安全问题,其对国家安全的威胁正日益凸显。网络舆情是指某一时间段内,网民对某一特定事件的意见总和。随着互联网技术的迅猛发展,网络舆情对社会影响日益增大,己成为社会舆论的一种重要表现形式。网络即是社会舆论的汇聚平台也是扩散平台。网络媒体,尤其是微博与其他传统媒体相比,具有进入门槛低、开放度高、传播速度快等特点。随着网络的普及,网民规模的不断扩大,网民己成为现代社会重要的舆论力量,对社会发展产生了重要的影响。同时,我们也应意识到,微博对政府和大众来说都是一把‘双刃剑’,如果网络出现突发舆情,但是政府相关部门反应滞后或者处理不当,很可能会引发人民群众的强烈不满并带来恶劣的影响,对社会稳定和谐构成严重威肋。而网络舆论传播速度快,信息真伪难辨的特点,也容易引发网上造谣、恶意煽动等事件。这也对现代的舆情管理部门提出了新的要求,因为一旦应对不力,其产生的破坏力将是巨大的。网络作为社会舆情的主要载体,每天都有海量的舆情信息在网络中快速传播,但是这些信息真伪难以确定,容易被某些不法分子利用引发网上造谣、恶意煽动等违法活动,为社会安定和谐带来负面影响。在当前风云变幻的国际关系,以及我们国家正处于改革转型期这一特殊国情这一现实下。不断涌现涉及老百姓切身利益的热点、焦点问题[fgl。所以网络上会有对当前社会不正当不公平现象的揭露,也有对现状不满的清绪发泄,更具体的还有对某些事件的情况反映。如果政府部门不能及时发现这些问题并作出应对措施,就会失去最佳的矛盾解决时机。因此,公安部门对网络舆情的实时监控十分重要。面对网络舆情的发展现状,公安部门肩负管理网络、引导舆论的使命,既不能视之为洪水猛兽进行围堵,也不能束手无策,放任自流。而应该对网络舆情进行实时的舆情监控和舆论引导,及时了解舆论动向,倾听基层民意,为维护网络稳定作出贡献,更好的为人民服务。但现有网络舆情监控软件不能全面、准确、及时对微博进行监控,不能满足公安部门的实际需求。为了保证公安部门对微博的不良信息进行有效的管控,本文研究了针对公安部门的微博舆情监控系统,自动地对微博舆情进行挖掘分析,为公安部门提供全面有效及时的微博舆情监测。公安部门微博舆情监控系统的实现,能够帮助公安部门正确应对网络舆情。能自动对微博舆情进行采集和分析,帮助公安部门对微博舆情进行正确的引导和管理,尽量减少不良影响,并建立针对微博舆情突发事件的快速应对机制,提高公安部门应对水平。在以下几个方面具有重要的现实意义:①了解民意②决策参考③社会监督(反腐倡廉)④危机预防⑤危机管理⑥宣传引导。我国的互联网发展十分迅速,网民数量日益上升,使用微博的用户逐步递增,发展十分快速,其中,不免有些人利用微博的零门槛、广泛性、即时性和匿名性等特点肆意的传播淫秽色情和低俗信息,甚至是反动信息来污染社会环境,特别是未成年身心健康。因此,如何的对微博中有害的信息进行及时监测与分析成为了当前新闻媒体监控的当务之急。如何从海量的信息中提取出有价值的信息,并且对负面消极以及虚假反动的信息进行及时监测与跟踪,已经成为了舆情监测的重中之重,其中最为常用的方法就是利用数据挖掘技术。数据挖掘技术是一个多学科的交叉领域,以数学算法为核心,综合了统计学、机器学习、神经网络等多门学科。通过数据挖掘技术,所得的结果因为排除了人为的干扰而十分具有客观性。作为一种对数据进行深层次分析的方法,可以通过对各类数据库以及数据仓库中的大量数据进行处理,排除有噪声、模糊数据的影响,分析和发现数据中蕴含的可靠的、有价值的、新颖的、可以吸引人们注意力的有效信息。用户可以将所得规律运用到实际工作中,达到指定良好决策,提高工作效率,提升企业效益的目的[7]。尤其是数据分析领域,数据挖掘技术从提出起就在该领域取得了相当大的成功。综上,对于舆情监测与分析系统,要充分借助于数据挖掘技术,建立完善的舆情监控体系,提高舆情监测的科学性和有效性。1.2国内外研究现状1.2.1国内外舆情监测研究现状近年来,世界上各个国家都十分重视关于网络信息的形成、传播以及热点发现等方面的技术。目前在网络舆情研究主要有两个方面:一个基于自然语言处理技术的研究,另一个是从数据挖掘的角度考虑,根据相关算法对信息进行聚合和分类[8]。(1)国外舆情的研究现状国外舆情研究相对于国内起步很早,大约在19世纪初就开始,到了20世纪中期,舆情研究理论已经走向成熟。其中最为著名的就是美国TDT研究项目[9]。TDT中的热点话题检测与跟踪的基本思想源于1996年,由不同大学的研究人员开始定义话题检测与跟踪研究的内容并进行开发[10]。(2)国内舆情的研究现状目前我国对于网络舆情的研究还处于起步和探索阶段,缺乏有效的预警与分析方法,如人民网舆情、新天舆情等比较先进的舆情分析系统都是建立在信息挖掘技术的基础上的。Web信息挖掘技术的出现和发展,为解决网络舆情问题提供了有效的技术手段。在国内,舆情概念最早由天津社会科学院研究所提出。并且随之建立了我国第一个正式研究网络舆情的研究机构,天津市社会科学院舆情研究所。在随后的发展中,我国陆续成立了众多舆情研究机构或者提供舆情监控的公司。总体来说,这些单位可分为四类[11]。在以上几类机构中,其中北京拓尔思公司和北大方正电子政务公司比较出色。这些系统在结构上基本都包括舆情信息的采集,信息的分析和处理以及舆情服务等几个部分。在舆情信息采集方面,这类技术也发展迅速,在传统的方法基础上又出上了许多各具特色的技术。根据国内外研究,其发展方向有如下几种:增量型爬虫,聚焦性爬虫,用户个性化爬虫和基于Agent的爬虫。增量型爬虫:互联网的网页信息一致处于不断的变化之中,网页被删除、网页被更改或者更加网页都是时时刻刻在发生。与普通类型爬虫不一样的是,增量型爬虫在保持不断的爬取新的网页的同时也在更新已经存在的网页。聚焦型爬虫:相对于通用网络爬虫覆盖面太广,所爬取的信息包含了大量的用户不关心的信息,这样不仅浪费了大量的网络资源以及存储资源,用户体验也不够好。聚焦网络爬虫主要是是为了应对不同领域、不同背景的用户对数据需求不同而产生的。聚焦网络爬虫并不追求很大覆盖面,它需要根据一定的网页解析算法和链接过滤条件定向有目的的抓取一些相关的网页资源。然后根据一定的搜索策略获取下一步的URL,重复这个过程直到给定的条件达到。用户个性化爬虫:相对于聚焦型爬虫,用户个性化爬虫更加注重于基于用户兴趣知道以及用户交互方面。基于Agent的爬虫:利用智能Agent的自主性、交互性、自发性、主动性等特点与信息采集技术相结合,能够使得爬虫更加具有灵活性和适应能力。1.2.2针对海量信息的数据挖掘研究及发展趋势(1)数据挖掘研究现状数据挖掘一词得到真正意义上的广泛流传,是在第一届“知识发现和数据挖掘”国际学术会议上。数据挖掘是一种需要利用各种方法,从大量数据集中提取出非平凡的、隐含的、潜在有用的信息、模式或规则的处理过程。数据挖掘不是一个简单的动作,而是一个以数据为驱动的循序渐进的数据探索过程。数据挖掘的技术基础是机器学习和统计学,被提取的信息可以有很多类型,有关联型、聚类模型、总结型等。近年来,针对海量的微博信息相关的研究已成为了热点研究方向,并取得了一定的进展,相关的挖掘算法大致可以从分为以下几个方面:在情感分析和挖掘方面,Read等研究了在情感分析中符号所起到的作用[12]。Wang研究对情感进行分类通过利用图的分类方法,把粒度细化到哈希标签中[13]。Guerra等提出了一种学习方法,该学习方法通过利用图模型以及随机游走模型来进行实时的情感分析[14]。在热点话题监测与跟踪方面,区别传统的新闻媒体,微博的文本长度短,信息量少,特征关键词不足以表示文本。针对微博的这种情况,很多学者进行了多方面的研究和尝试。陆荣等对微博数据稀疏性的处理办法是通过利用LDA模型进行隐主题建模,通过该模型来计算各个文本之间的相似度[15]。但是由于LDA模型需要对主题进行反复抽样,这样将导致计算量过大,进而影响处理数据的速度。CuneeytGurcanAkcora等提出了一种通过EmotionCentroid及SetSpaceModel的方法来发现Twitter中的热点[16]。杨震等采用短文本层次化聚类去发现热点话题,具体方法是将每一个本文看成一个字符串,并根据字符串的自身特性直接计算每个文本之间的相似性,进而在次基础上进行层次化聚类[17]。Sasa和Miles等采用了一种新的算法,该算法可以快速地处理海量数据并且能够不失精度[18]。ZitaoLiu等基于part-of-speech和HowNet扩展单词的语义特征,提出了一种特征选择方法,该方法更加适合短文本从而改进了聚类效果[19]。Ramage等更加注重个性化用户信息的需求,提出了一种基于LDA的半监督学习模型与Twitter特性化相结合的方法[20]。(2)数据挖掘的发展趋势(一)数据预处理:未来的预处理可能会成规模化,以确定分布式的、大的、复杂时间数据的新型有效模式。在现实世界中海量的数据必然包含中大量的噪声、无效、重复等无效数据,对这类数据的前期处理直接影响着聚类的效果,作为数据挖掘的重要的第一步,必须要对这个关键环节严加处理。(二)复杂数据对象:数据挖掘渗透到人类生活的各个领域,数据类型日益丰富,现有的可用的数据挖掘技术被限制为仅挖掘数据的传统格式。在未来的发展趋势中,数据挖掘技术将发挥潜力,重点探索有关复杂数据对象的挖掘,如高维数据挖掘、噪声挖掘等。(三)Web挖掘:这一方向的主力军是大型互联网公司,如现在的Google和百度,还有社交及时通讯公司。他们更注重算法带来的实际的搜索性能,提升热点分析的能力,相应的垂直搜索以及网络舆情监控等应用得到了发展。1.3研究内容和研究目标(1)相关技术理论研究研究以数据挖掘(DataMining)技术、中文分词技术、数据仓库(DataWarehouse)技术、网络爬虫技术为技术手段的舆情监测与分析系统。(2)获取微博舆情信息方面不同于传统的新闻、博客、论坛的信息获取,对于具有海量的用户以及信息,很强的实时性的微博来说,需要专门对获取微博的页面信息进行设计。普通的网络爬虫并不很好的满足本系统的需求,研究众多的开源爬虫框架,例如Nutch、Crawler4j、WebCollector等爬虫框架,分析每一个特性和适用场合,需要设计出专门针对微博的网络爬虫。并且对于获取的半结构化的页面信息,能够很好的进行抽取出所有的内容。本部分研究内容主要包括:对多种爬虫框架的研究;对网络爬虫爬行策略的研究;对网络爬虫解析页面算法的研究;(3)微博舆情信息分析方面本文重点研究内容之一,借鉴传统的方法对微博进行热点话题发现的研究成果,针对微博信息的特点,研究通过K-means算法以及词共现原理相结合的方法来识别主题词挖掘热点话题。本部分研究内容主要包括:对抽取出的页面信息进行原始数据预处理,研究中文分词技术对其进行中文分词,通过相对词频以及词频增加率两个因素相结合计算词的权重,然后获取主题词列表,最后利用本文提出的方法进行聚类。通过改进相关的文本处理技术,提出了一种基于K-means算法与词共现度相结合的方法去识别主题词来挖掘热点话题,是突发事件话题更加细化,从而提供舆情监测的话题精度。(4)舆情信息的展示方面研究通过基于MVC模式的SSH2(Struts2+Spring+Hibernate)框架以及基于Flash的OpenFlashChart2开源报表组件来对舆情信息分析结果进行可视化的直观展示。1.4论文的章节安排本论文共分为五个章节,结构安排如下:第一章:本章简单地介绍了论文的研究目的和意义,网络舆情研究国内外的研究现状以及发展趋势,并总结了本论文的研究内容和目标,最后介绍了论文的结构。第二章:本章介绍了舆情监测与分析平台在开发过程中所涉及到关键技术:从微博开放平台API以及网络爬虫技术两方面介绍了信息提取技术。从数据挖掘的概念,过程和方法三方面介绍了数据挖掘。简单介绍了中文分词技术。最后从特点、数据组织、体系结构方面介绍了数据仓库技术。第三章:介绍了舆情监测与分析平台的模型设计,包括需求分析、总体流程以及系统体系结构。并简单介绍了信息采集模块,基于K-means算法和词共现的信息分析模块以及舆情展示模块。第四章:对本文以上所提出了舆情监测与分析模型设计进行了实现,具体为实现了信息采集的过程,对本文提出了基于K-means算法和词共现的热点话题发现方法进行了实验和测试。最后展示了舆情展示模块。最后,在结论部分对本文研究与实现的舆情监测与分析平台所做的工作进行了研究成果总结,指出了系统平台的不足以,并对将来可以做出的更改和进一步的工作进行了展望。第2章 相关技术理论研究2.1信息提取技术2.1.1针对微博开放平台API爬取信息因为目前新浪微博最具有影响力,因为本系统数据来源选择为新浪微博,以下所述微博若没有特别指明均为新浪微博。新浪微博开放平台有着海量的用户以及强大的传播能力,它可以为第三方合作用户提供强大的应用和完善的服务。该平台拥有海量的用户资源,截止到2013年3月底,微博用户数已达到5.56亿,活跃用户数高达5000万;多种SDK,包括C++、PHP、Java、ActionScript、Python等流行语言的软件开发工具包。开发者可以创建各种具有创新力的站内应用、无线应用、专业版应用,以下为应用的创建和发布的总体流程图2-1。图2-1微博API开发总流程图无论是新浪微博还是国内其他三大微博,其开放平台的使用都是需要登录以及认证授权后才可以使用。目前各个微博开放平台的授权机制都是通过OAUTH认证来实现的。新浪微博的各个功能,例如发微博、传照片、加关注,甚至是搜索功能都可以通过API来实现。如表2-1所示OAUTH2.0的授权流程。

表2-1OAUTH2授权流程图2.1.2网络爬虫技术由于所有的开放平台都会限制开发者对自身资源的使用。这是因为基于安全性的考虑。每个平台对API的限制策略基本相同。由于新浪微博API调用的限制,因为本系统还会利用直接通过web网络爬虫技术爬取数据。在当今时代,网络已经深入人心,网络已经成为人们获取信息的重要途径。然后随着互联网的快速发展,网络上的信息也成指数级的增长,人们想要从海量的信息中获取到自己所需要的信息是一件十分困难的事情,因此相关的搜索引擎技术也就应运而生,例如中国的百度和国外的谷歌都是该领域的巨人,简单的来说搜索引擎就是把网络上的信息数据进行收集整理的系统,这个系统的一个重要功能就是给用户提供一个可查询的入口。人们可以通过搜索引擎很方便的获取到自己所需的信息。在搜索引擎中,如何获取收集信息,就是该节所要介绍的网络爬虫。世界上第一个网络爬虫是webCrawler,是1994年出现。现如今,已经有了很多的类似的公司存在,每一个公司都会把他们自己开发的网络爬虫系统作为自己的商业机密不对外开放。网络爬虫简单来说就是按照一种给及的规则,自动的在互联网上抓取相关信息的程序。本文介绍两种爬虫,一种是通用型爬虫,一种是聚焦型爬虫[21]。它们的工作流程图如图2-2下:图2-2通用网络爬虫和聚焦网络爬虫流程图如图2-2所示,通用的网络爬虫和聚焦网络爬虫在开始的流程中基本上没有什么区别,都是从一个或者若干个初始的URL开始,将该初始URL列表放入待爬去队列。然后开始从待爬去队列中开始循环拿出一个URL,打开这个URL的连接,开始下载该URL对应的页面,然后开始解析该页面的所有的新的连接,获取到新的所有的链接后,通用网络爬虫和聚焦网络的爬虫在这一步开始出现区别。因为通用网络爬虫覆盖面太广,所爬取的信息包含了大量的用户不关心的信息,这样不仅浪费了大量的网络资源以及存储资源,用户体验也不够好。聚焦网络爬虫主要是是为了应对不同领域、不同背景的用户对数据需求不同而产生的。聚焦网络爬虫并不追求很大覆盖面,它需要根据一定的网页解析算法和链接过滤条件定向有目的的抓取一些相关的网页资源。然后根据一定的搜索策略获取下一步的URL,重复这个过程直到给定的条件达到。对于网络爬虫还有网页搜索策略、网页分析算法、重新访问策略[22][23],平衡礼貌策略等。(1)网页搜索策略对网页的搜索方法一般有三种形式,分别是广度优先、最佳优先和深度优先,这几种搜索方式各有利弊,但是其中最常见的是广度优先和最佳优先相结合的方式,深度优先由于常会使爬虫产生陷入问题而不会被单独使用。图2-3页面链接关系图1)广度优先搜索广度优先搜索是一种简单的图的搜索算法之一,该策略的具体实现较为简单。简答来将,就是在抓取的过程中,先对当前的一层进行搜索,在完成该层同一级的所有网页后,才开始从上一层获取的所有链接中进行下一层的搜索,以此类推,一层一层的搜索下去,直到指定的条件出现。这种搜索策略设计和实现比较简单。但是有一个缺点就是随着抓取的网页越多,不相关的网页也讲大量的出现,这个时候算法的效率将大打折扣。对于图2-3页面链接关系图,广度优先的搜索路径为:A-BC-DE2)深度优先搜索深度优先搜索也是一种简单的图的搜索算法之一,这个设计较为简单。对于具体的网络爬虫的实现来说,就是从起始网页开始,获取这个网页中所有的URL中,然后从这些URL中选择一个URL再次进入。就这样一层一层的往深处爬取,直到一条线路达到尽头再去处理另外一条路线。但是这种爬取的策略所获得的网页的价值比较低,因为随着层数的深入,网页的重要程度相对于初始网页要大大降低,网页的价值都会相应降低,因此对于这种策略,很少被使用。对于图2-3页面链接关系图,深度优先搜索路径为:ABD-E-C(2)相关的开源爬虫框架Nutch是一个开源的基于Lucene的Java实现的搜索引擎,由两个部分组成,一个是全文搜索和Web爬虫。Nutch是目前最好的爬虫之一,支持分布式处理。但是对于获取微博内容由于需要实现模拟登陆过程,使用Nutch实现较为困难。Crawler4j是由YasserGanjisaffar开发的,用Crawler4j进行爬取网页,用户只需要提供爬虫的初始种子、线程的数量和对每个页面的自定义操作即可。但是虽然Crawler4j提供了精简的用户接口,但是没有自己的一套插件机制来定制自己的爬虫,如果需要爬取微博的内容,Crawler4j依然需要用户自己实现模拟登陆的代码,这方面就需要去修改它的源代码去实现完成。WebCollector开源爬虫内核是结合了Nutch的爬取逻辑以及Crawler4j的用户接口两个优点,自己设计了一套插件机制,实现了一个爬虫内核,虽然也需要用户在爬取微博时自己实现登陆的代码,但是相对上两个开源框架来说,WebCollector小而精,更加容易去实现,将自己的插件嵌入它的内核中。2.2数据挖掘理论基础数据挖掘作为一种多学科交叉的技术,可以被多种方法定义。这个词是在一届“只是发现和数据挖掘”国际会议上得到了广泛的流传。但是同时有部分学者认为数据挖掘只是数据中的只是发现的一个过程,另有一部分认为这两个词为同义词。数据挖掘是一种需要利用各种方法,从大量数据集中提取出非平凡的、隐含的、潜在有用的信息、模式或规则的处理过程[24]。数据挖掘不是一个简单的动作,而是一个以数据为驱动的循序渐进的数据探索过程。数据挖掘的技术基础是机器学习和统计学,被提取的信息可以有很多类型,有关联型、聚类模型、总结型等。2.2.1数据挖掘概念“啤酒与尿布”--数据挖掘史上最经典的故事,也形象生动的说明了数据挖掘的意义。数据挖掘即探索数据本身的潜力,从而找出数据间的联系并提供给决策者有分析价值的统计结果、预测结果等。一般来说,数据挖掘的定义可分为两类,一个是从技术角度定义,另一个是从商业角度定义[25]。数据挖掘的技术定义:从大量数据中挖掘有趣模式和知识的过程。它包括了以下几个关键含义:数据源必须是真实大量的;目标是发现用户所关注的知识;发现的知识是可被接受、易于理解、能够应用的;发现的知识无需适合各种复杂情况,仅需支持特定的业务问题即可。数据挖掘的商业定义:作为高新商业信息处理技术的代表,数据挖掘主要对商业数据库中大量业务数据进行抽取、转换、剖析和模型化处理,从中找出在辅助商业利益决策中起关键性作用的数据。商业的根本还在于利润,所以挖掘的常见用途为客户行为分析,购买力分析,风险预警分析等。2.2.2数据挖掘过程数据挖掘不是简单的一个动作,而是一个过程。数据挖掘的跨行业标准过程CRISP-DM将数据挖掘过程分为六个阶段[25]。第一阶段:业务理解。其主要任务为从业务角度理解项目的背景、目的和要求,将理解转化为能够使用数据挖掘方法实现的问题,并制定出完成目标的工作方案。第二阶段:数据理解。开始从数据源收集原始数据,考查数据质量,对数据形成初步的意向。第三阶段:数据准备。从收集到的原始数据着手,形成最终用于挖掘的数据集,在这个过程中会使用到数据清理、数据转换等多种方法。第四阶段:建立模型。依据目标问题选定合适的建模方法,通过实验分析校对参数值,使其达到最优状态。这个阶段里,一些建模方法对数据格式、数据细节有既定要求,有时也会面临重新选取数据的情况。第五阶段:模型评估。全面评估模型的质量,回顾建模过程中的每个步骤,确保模型解决问题与业务目标一致,并明确如何进一步使用模型。第六阶段:模型实施。以友好的交互方式展现模型挖掘出的知识,使用户能快速灵活配置应用模型。在这六个阶段中,前五个阶段都不是简单的线性关系,先后顺序在实现目标的过程中也会不同,各个阶段都是循环往复、持续改进的。2.2.3数据挖掘方法数据挖掘技术的研究方向主要是所应用的算法以及知识的发现过程。在这些方向上,通过融合统计学、人工智能、机器学习等多个知识领域,提出了包括预测和评估、分类、聚类等多种数据挖掘的算法[25]。统计分析方法:该方法主要用来实现数据知识总结以及关系型数据挖掘。该方法对数据表中的不同属性进行统计分析,找到它们间的关系。这类分析方法可采用主要成分分析、回归分析的分析方法。分类:该方法是要根据数据库中数据对象的共同特点,并按照分类模式将这些数据对象划分到不同类当中,这个过程也叫做“学习”,其目的是将数据库中的数据项通过分类模型映射到某个给定的类别,有了分类模型,即可对新加入的数据进行自动预测并归类。这类分析方法可采用决策树、神经网络等。关联规则:该方法是描述数据库中数据项之间所存在的内在关系的规则,在一个事务中,由于某些属性数据的出现而导致另外一些属性数据的出现,即隐藏在各个数据项间的关联。找到关联后要对找到的关联规则进行正确性评估,评估时需要采用支持度和可信度两项来作为评估参数。评估的意义在于确保这些根据已有数据获得的关联规则可以成功运用到将来相似的情况中。聚类分析:把数据库中的一组数据根据数据间的相似性和差异性分成若干类,其最终目的是确保构成每一个类中的数据之间的相似性尽可能大,而不同类间数据的相似性尽可能小,这个分类的过程称为聚类。聚类方法涉及到分类簇数以及初始化基础项两个参数,不同方法对于这两个参数的依赖程度不相同。通过对特定的数据库中数据的聚类,我们会发现数据属性之间可能存在的相互关系和数据的分布情况。2.3中文分词中文分词(ChineseWordSegmentation)指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。对于舆情监测与分析系统来说,做好中文分词至关重要。本系统需要通过对主题词的分析来进行舆情监测与分析,所以就需要中文分词功能。在各类中文分词器中,中科院分词器ICTCLAS较为优秀。该分词器是在中科院计算技术研究所多年研究工作积累的基础上,研制出的分词器,主要功能包括中文分词,词性标注,命名实体识别,新词识别,同时支持用户词典。2.4数据仓库DW技术数据仓库的概念最早出现在20世纪80年代中期,是由着名学者W.H.Inmon在《建立数据仓库》一书中提出的,因此他也被称作“数据仓库之父”;世界上最早的数据仓库则是由NCR公司为全世界最大连锁超市Wal-Mart在1981年建立的[26]。2.4.1DW主要特点与传统的数据库以及联机事务处理相比,数据仓库中的数据有以下一些特点[27]。(1)数据组织面向主题这种数据组织方式可以在较高的层次上完整一致地描述所要分析的对象,并且能刻画出各个分析对象在其领域的各项数据以及数据间的关系[28]。因此,这种面向主题的组织方式具有更高的数据抽象级别,更利于针对某一主题进行深入分析。例如通信行业针对客户主题而组织起来的数据,便于进行客户细分以及客户流失情况分析。(2)数据集成化数据仓库中的数据一般从企业或部门的基础数据库中抽取,并进行一系列的筛选、清噪、重新组织等步骤而得到。针对不同数据来源的数据要统一数据格式、数据结构等,如字段的同名不同义,同义不同名,字段长度,精度差异等。数据仓库通常会辅助决策支持系统,因此全面而正确的数据是产生有效决策的前提,只有将相关数据收集地越完整,得到的结果才能越可靠。(3)数据稳定性因为决策支持是建立在对大量历史数据的分析之上,所以数据仓库中的数据主要以历史数据为主,并且针对历史数据所做的操作主要为查询和分析,在常规数据库中常见的增删改操作在数据仓库系统中很少出现。图2-4数据仓库的数据稳定性示意图(4)数据随时间而变化数据仓库中的数据不更新是当用户进行分析处理时才有效,并不是说整个数据仓库的数据永远一样永远不变[29]。它是随着时间的变化而变化的,具体表现在以下三个方面:一是随着时间的变化,数据仓库中会增加新数据内容。数据仓库每隔一段时间会扫描数据库,捕捉到数据的增加后追加到数据仓库中,但并不会对原有数据进行修改。二是随着时间的变化,数据仓库会删除不用的旧数据。仓库中的数据有存储时间限制,超过了期限,就会对这些过期的数据进行删除操作。相应的数据在进入数据仓库时都盖有时间戳,一般的操作环境中只保存30-90天的数据,而数据仓库中保存的是具有很长时限的数据,一般为5-10年,数据量为10T以上[30]。三是数据仓库中包含有大量的综合数据,这些数据大都按照时间来进行综合,比如按时间来抽样,按时间来进行趋势分析等,所以要对数据按照时间段来进行新的综合。2.4.2DW数据组织(1)DW数据组织结构数据仓库中,数据被分成四个级别:轻度综合级、高度综合级、早期细节级和当前细节级[31],如图2-5所示。早期细节级数据经过综合后,生成当前细节级的数据,这部分的数据是最近一段时间内的业务数据,随着时间推移,也会逐步转换为历史数据。轻度综合级的数据就是从当前细节级数据中提取而来,设计这层的数据结构需要考虑数据的粒度,粒度越大,细节程度越低,相应的综合程度就越高。高度综合数据和轻度数据都是由细节数据聚合而来,二者是相对的概念,没有绝对界限。图2-5数据仓库数据组织结构图在数据仓库中,元数据是衍生品,是用来定义数据仓库对象的数据[32]。它包括对数据仓库数据名的定义、数据提取和清理操作、数据环境规划、综合算法运用等。元数据扮演着不同的角色,主要有:(1)目录作用。在决策支持系统中,辅助分析者定位数据仓库中的数据。(2)映射指南。为数据由业务操作环境映射向数据仓库环境时作指南。(3)算法指南。(2)DW数据组织形式数据仓库的几种不同的数据组织形式如下:(一)简单直接文件简单直接文件是数据仓库数据组织方式中最简单的。它每隔一段时间,就从基础业务数据库提取并处理数据,然后存入数据仓库中,逐渐积累后进行数据快照并储存。其特殊形式为“简单堆积文件”,该种形式间隔时间固定为一天,即每天都要进行快照并存储。(二)连续文件连续文件是多个简单直接文件的合并结果,它可以提供一段时间内的数据细节,并且可以继续增加同类简单直接文件丰富自己的内容。通常的合并做法为在原表基础上增加时间纵列。(三)定期综合文件与其命名含义相同,定期综合文件是在简单直接文件的基础上进行综合统计运算,以时间(如日、月、季度、年)为单位,每隔相应的时间段对数据进行追加合并。因此,定期综合文件将两者结合,牺牲了数据细节,从而减少了数据量级。2.4.3DW体系结构目前被普遍接受的数据仓库体系结构为“三层结构”理论[33],如下图2-6所示。(1)数据获取/管理层数据仓库中的数据来自多个业务数据库,这些来自四面八方的数据并不一定是理想的,必须经过适当处理才可以提供给上层的数据仓库,同时数据仓库本身也需要运营维护。因此,这些任务都是数据获取/管理层需要完成的。(2)数据存储层数据存储层是数据仓库的主题,它所存储的数据主要包括三种类型,一是经过清洗等处理,面向主题存放的来自外部数据库的数据;二是数据仓库的元数据;三是针对不同数据挖掘分析主题的数据集市。(3)数据分析/应用层数据分析层主要面向用户应用,可以满足用户的查询、分析等需求。它主要包括查询/统计,OLAP服务,数据挖掘(DM)几种功能[34]。图2-6数据仓库三层体系结构2.5K-means算法1.K-means算法的基本概念K-means算法是典型的聚类算法,是发现给定数据集的K个簇的算法。簇的个数K是用户给定的,算法将给定的数据集划分到K个簇内,使这K个簇内的数据对象具有高的相似度,而簇之间的对象具有低的相似度。2.K-means算法流程1)创建K个点作为起始的质心2)根据簇的质心,将每个对象划分到距离最近的簇中3)重新计算簇的平均值,并将该平均值作为簇新的质心4)计算评价函数5)重复执行(2)至(4)步,直到聚类中心或者评价函数不在发生变化。3.K-means算法的不足原始K-means算法需要给定分类个数K以及初始聚类中心,并且这两个参数对聚类结果的影响十分大,是典型的非监督学习法。在本系统的应用中,面对软件和系统的使用者,我们无法要求他们直接给出专业合理的参数值,这就无法保证最终结果的合理性和有效性,系统的意义也就失去了。因此需要考虑如何消除分类个数K以及初始聚类中心对聚类效果的影响。2.6词共现法在文本聚类中,常用的的是空间向量模型,但是应对与微博的情况,由于微博的短文本的特点,空间向量模型不能很好的表示。由此本文采用词共现法来定义短文本之间的关系。词共现是从词语之间在文本中同时出现的概率方面来衡量词语之间的相似度。词共现原理的核心思想就是词之间的语义关系通过他们之间的共现的频率来表现出来的。关于词共现原理有两个重要的概念,一个是相对共现度一个是共现度,她们分别定义如下:词A相对于B的共现度=词AB在同一文本中同时出现的频率/词B在这一文本中出现的频率词A与B的共现度=(词A相对于B的共现度+B相对于A的共现度)/2。2.7本章小结本章介绍了舆情监测与分析平台在开发过程中所涉及到关键技术:从微博开放平台API以及网络爬虫技术两方面介绍了信息提取技术。从数据挖掘的概念,过程和方法三方面介绍了数据挖掘。简单介绍了中文分词技术。最后从特点、数据组织、体系结构方面介绍了数据仓库技术。第3章系统需求分析本文舆情监测与分析平台的数据来源主要是对新浪微博网页信息的抓取获得,通过这些微博信息及时地发现相关的舆情信息;该平台需要对原始的信息进行一系列的数据处理以及相应的数据分析后提供可靠的舆情分析结果,能够准确的指出舆情信息以及某一舆情对应的趋势分析。系统最后还需要能够自动的生成舆情报告和各类的舆情分析数据,并且可以进行对应的可视化的展示。3.1系统功能要求本系统可将平台模型进行一下几个方向进行研究:图3-1舆情监测与分析平台(1)信息采集功能在很多情况下,网站的访问都需要用户登录后才可以访问资源,要想通过网络爬虫获取微博页面的信息就需要通过模拟登陆来实现。对于新浪微博的模拟登陆主要利用Fiddler进行抓包分析后,利用HttpClient进行模拟登录,模拟登录的重点是获取页面的跳转以及cookie的保存。实现微博模拟登录另外一个需要注意的情况是登录的过程是随时可能发生变化的,在以后如果需要实现模拟登录需要根据当时的抓包分析情况后再进行登录,但是大致的原理是一致的。信息采集系统通过研究开源爬虫框架Nutch、Crawler4j和WebCollector爬虫内核,结合Nutch内核+插件的机制以及Crawler4j良好的用户接口的优点,研究实现了一套针对微博的多线程网络爬虫。信息采集主要包含两个部分,页面抓取和信息存储。通过聚焦网络爬虫程序在微博页面上进行页面抓取,并且利用jsoup开源框架进行页面解析,将获得的信息进行保存至数据库中,为下一步的信息分析做好准备。图3-2信息采集功能(2)信息分析功能数据预处理是数据挖掘中极为关键的一步也是最为基础的一部。因为对于原始数据,由于数据来源不单一,格式复杂不统一,噪声数据,无效数据的存在,会严重影响聚类的效果。对微博数据来说更是如此,微博数据中对于热点话题的抽取来说还有大量的无用数据,类似于广告微博、个人性微博等,在进行主题词抽取之前,需要对这类的数据进行筛选。信息分析本部分同样包括两个部分,数据预处理和数据分析。网络爬虫程序将抓取来的网页信息经过转码以及分段处理后将经过数据预处理模块进行数据去噪,分词,停用词过滤,广告词过滤等处理。经过数据预处理后的数据可继续进行数据分析。图3-3信息分析功能1)微博要素分析以新浪微博为研究平台,微博中的信息基本可划分为两大类:用户信息与微博项信息,每方面的信息又包含很多详细信息,具体信息类别及内容见表3-1。其中,用户信息分为用户标识信息、用户基本信息和用户活动信息,用户标识信息指的是对用户有标识作用的信息,如用户名和用户ID或用户链接等;用户基本信息的内容很多,但数据参差不齐,较统一的有用户城市,其次是用户是否实名认证用户和是否含有个人描述;用户活动信息包括“关注”、“粉丝”和“微博”三部分,每一部分都有数目及列表信息。微博项信息则是指用户发表的一篇微博的信息集合,由用户标识信息、微博项正文、微博项属性信息、微博项引用信息组成。微博项的属性信息包括发布时间、渠道、转发及评论次数。其中时间通常是精确到分钟的绝对时间,但12个小时内发布的微博项时间采用相对时间形式,如“6小时/分钟前”等;发布渠道指发布微博项的各类终端,包括各类手机客户端,电脑网页客户端等;转发次数记录的是该微博项被直接转发的次数评论次数是针对该微博项发表评论的用户数目;微博项的引用信息是微博引用的原始微博项的信息,包含被引用微博的除时间和发布渠道外的其他信息,微博项的引用信息经常与微博项正文中的标志同时出现,表示微博项被多个用户连续转发。表3-1微博信息类别及内容信息类别信息内容信息内容描述用户信息用户标识信息用户名、用户ID等用户基本信息用户城市、个人描述等用户活动信息关注、粉丝和微博数目及列表微博项信息用户标识信息发表微博用户、用户ID微博项正文发表微博内容微博项属性信息发布时间,渠道,转发及评论次数微博项引用信息引用原始微博项信息2)微博舆情监测要素分析突发事件引起的网络舆情直接关系到社会稳定,因此需要对突发事件的相关信息进行认真分析和判断。突发事件网络舆情的发生发展一般会通过某些变量特征得以体现识别这些变量对于监测突发事件网络舆情当前的发展态势至关重要。网络舆情传播的外在表现形式即是网络信息数量的变化,所以根据网络信息数量的变化可以描述网络舆情传播的影响程度,通过网络信息量与网络舆情影响程度成正向相关这一稳定关系,便可以描述网络舆情影响程度的变过过程。随着信息量的变化,网络舆情呈现不同的态势这些态势的变化决定了舆情的影响程度,因此可以通过监测信息量的变化找到舆情的爆发点,为突发事件网络舆情的预警处理提供依据。首先对影响用户的属性变量进行分析。用户信息体现了用户对舆情传播的影响力网络舆情如果没有一定数量的网民关注,信息的传递渠道、方式和速度都会有所限制从而无法形成规模。评估用户影响力最主要的三个特征是用户粉丝数、认证类别和微博数。粉丝是微博用户信息发布和传播的链条,用户拥有的链条越多,联系越频繁,联系对象的传播能量越强,那么该用户发布的信息的传播面就可能越广,潜在影响力就越大。认证类别是微博用户在微博网络环境中一种社会影响力与权威性的直观展现,依据其影响力大小划分为不同的认证等级,在新浪微博中主要包括三个认证类别:普通用户,微博达人以及实名认证的大V用户,这三种类别对舆情传播的潜在影响力与可信度依次增强。微博数会影响到用户的传播能量,发表微博越多说明了用户的活跃程度越高,有可能成为意见领袖,加快舆情传播速度。本文以突发事件为切入点研究微博网络,在爬取微博数据的策略上与以往的在线社会网络的研究不同,本文爬虫分为4个步骤:1)通过微博搜索页面,输入关键字,获取突发事件相关原创微博;2)爬取原创微博的转发与评论;3)爬取参与其中的用户个人信息;4)爬取用户关系,指的是用户的关注关系。所以系统整体需求框架图如图3-1所示:图3-1爬虫系统需求图3-2爬虫程序逻辑示意图舆情展示:本部分主要为前端以及后台的界面操作,并将分析的结果进行可视化操作。(3)舆情展示实现舆情分析展示针对微博的热点展示。数据进行的热点话题发现,经过数据预处理,主题词抽取,话题聚类后展示出的热点话题列表。3.2非功能需求除了以上功能性需求以外,还有以下的非功能性需求。(1)易用性需求:由于舆情监测与分析平台是由非工程师人员操作,因此该系统需要针对使用者的习惯以及要求进行页面的展示并且有着完善的文档使其具有良好的操作性。(2)代码可读性:在系统开发过程中,所有涉及到的类,方法以及算法都应该有着详细的代码注释,并且配备有良好的文档说明使其具有可读性以及可理解性,以便后续开发者能够更好地修护和升级。(3)容错及抗灾能力:在舆情监测与分析平台中,数据信息是最为基础的一层,因为作为数据冗余备份至关重要。另一方面,对于在系统使用过程中有可能发生的任何错误和异常都应该具有详细的日志文件以便能够进行排查纠错分析。

第4章系统设计4.1系统概述根据对系统需求的分析,系统总体流程图如图4-1所示。信息采集通过获取一系列的网页URL进行抓取网页信息,通过解析网页获得原始数据并进行保存。信息分析获取原始数据进行预处理后,开始进行算法分析,最后将结果进行展示。图4-1系统总体流程图根据系统总体流程分析,设计如图4-2所示的体系结构。网络爬虫负责执行从新浪微博获取大量网页信息的任务。按照人工设定的初始URL队列,将网页内容下载到本地,再讲网页内容进行提取,为分析功能做数据准备。网络爬虫主要分为模拟登录以及网页解析下载。模拟登录主要用来负责模拟登录认证;网页解析下载负责将半结构化的网页信息进行结构化的处理。信息分析主要对网络爬虫下载的信息进行数据预处理以及数据分析。图4-2系统体系机构图4.2信息采集功能设计信息采集功能研究最主要的就是网络爬虫的研究。为了在微博上进行爬取以获得网页信息,首先必须解决登录认证问题,该功能可由模拟登陆实现。模拟登陆实现后需要进行网络遍历,这个过程可以抽象为一个有向图遍历自动机。在采集过程中,网络爬虫需有实现以下几个特性:对采集的结果进行结构化处理;每一个独立进程都是同等的关系,独立完成各自的任务;能够通过模拟提交搜索;具备可扩展的架构,随时应对舆情分析对于数据采集的新需求。最后还需将采集到的数据进行存储。综上所述,可将信息采集进行五个功能划分,分别为登陆管理,线程控制,网页采集,网页解析,数据存储。根据面向对象设计模式原则进行模块依赖关系划分,如图4-3所示:图4-3模块依赖关系1、登陆管理在互联网很多资源中,有一些资源必须经过登陆认证过后才可以进行访问。针对微博信息的获取,必须进行模拟登陆才可以获取微博网页上的各种信息。互联网应用一般都是采用的HTTP协议。HTTP协议是一个属于应用层的面向对象的协议,是无状态协议。为了能够识别请求的来源,应用程序服务器就需要一种机制来对访问状态进行识别与存储,一般来说都会采用session机制。本部分在研究分析时,考虑到微博有两种不同的登陆方式,一种是网页微博,一种是手机端微博。因为手机端微博的反爬虫机制相对于网页微博较为宽松。因此,除了在网页微博上爬虫数据外,还可以实现在手机端微博的爬取。2、线程控制从线程角度考虑,网络爬虫可以分为单线程和多线程。一般在爬虫架构中,为了提升爬虫的性能,都需要采用多线程的爬虫技术。本系统才采用多线程的架构,如图4-4所示。图4-4 多线程爬虫结构图在对页面进行采集,分析的过程中,如果采用单线程网络爬虫,那么对于页面的采集和分析这两个步骤是不能够同时进行的,由于分析页面的时间相对于下载页面的时间来说较长,如果分析页面越长,那么下载的效率就越低,这将十分的影响网络爬虫的运行效率。因此对于这个过程将采用分层次的多线程网络爬虫,本系统主要由两种线程,一种是页面下载的线程,一种是页面分析的线程。页面下载线程的优先级要高于页面分析的优先级,并且这两类线程将采用生产者消费者的模式来保证系统的正常运行。3、页面采集网络爬虫在微博网页中的超链接上漫游,记录URL和网页内容,本分模块主要为URL的采集与处理。一般来说,会给爬虫程序一个或者若干个初始URL,对该URL一次进行访问、索引、保存、过滤,去重等步骤。首先拿到初始的URL列表提取出URL,然后对该URL进行页面解析,目前大多数web页面都是基于HTML的文档,HTML是超文本标记语言,在HTML中含有大量的<a>,<area>,<frame>标签,在这些标签中包含着大量的超级链接,在对URL处理的过程中,提取这些链接是重中之重。需要注意的是现在有很多网站的页面代码有一部分内容是通过javascript脚本自动生成,并不能直接通过HTML标签提取出这些链接,对于这种情况,首先需要的是执行这些javascript脚本,然后从这些脚本生成的内容中获取这些超级链接,在提取到这些URL后,需要将这这些相对的URL进行绝对化处理,然后放入未处理的URL队列等待进一步的处理。图4-5URL提取过程URL处理过程主要包括URL标准化,URL去重,URL过滤。整体流程如图4-6所示。图4-6URL处理过程图URL标准化主要工作有将URL中所有字母转换为小写字母,将&;字符串转化为&,最后将URL中某些特殊字符%和ASCII码转为字符本身。URL过滤主要工作为匹配给出的正则表达式来完成过滤,因为一个页面包含有大量的对舆情信息无用的链接。最后URL去重,因为在信息采集过程中可能会爬取到重复的URL,这就需要将这些URL去除掉。URL去重方法一般通过哈希表去重和布隆过滤器去重。哈希表去重这种方法是通过计算正文信息的MD5码来进行对比实现的[35][36]。对MD5算法的简要叙述可以为:MD5将输入的信息以512位进行分组(如果原始信息的位长对512求余不等于448则需要对原始信息进行填充,填充规则是在信息后面填充一个1和无数个0直到满足条件),将划分后的分组再一次以32位进行划分,然后经过一系列的处理后产生一个128位的散列值。但是利用哈希表去重有一个很大的缺点就是存储效率低,浪费存储空间。因为本系统采用布隆过滤器进行去重。布隆过滤算法也是一种基于哈希查找算法,但它比哈希表节约空间,它只需要哈希表1/8到1/4的大小就能解决相同的问题。该算法的基本思想为[37]:(1)布隆过滤器有k个哈希函数k1,k2……km,还有一个长度为m的位数组R,所有的位初始置为0。(2)设待处理元素集合为S={s1,s2,…,sn},共有n个元素。(3)增加元素的方法是对有n个元素的S进行k个哈希函数的映射,将每个元素Si映射成k个值,然后将位数组R中对应的置为1。(4)如果要查找某个元素x是否存在,则通过k个映射函数得到k个值,然后判断该k个值对应的位数组R中是否全为1,如果全为1则存在,否则不存在。4、网页解析页面解析利用开源框架HtmlUnit和Jsoup配合使用。HtmlUnit可以看成一个没有界面的浏览器,正是因为没有界面,因此执行速度十分快,由于现在大量的页面不再是简单的HTML表单,而是通过js代码动态生态信息,因为可以解释js代码从而获取页面动态信息称为页面解析的重要部分。HtmlUnit内置了Rhinojs引擎,因此可以执行js代码。5、信息存储信息采集过程中的相关信息数据进行存储,保证信息的完整、安全。4.3信息分析功能设计信息分析的主要研究是通过分析信息采集模块采集到的原始信息得出相关舆情信息。由于原始信息包含有大量噪声数据,所以第一步首先是要进行数据预处理。原始信息采集后,先进行粗糙的去重处理。而后通过使用中科院的ICTCLAS分词器进行分词,总体流程为初步分词、词性标注、人名地名识别、重新分词、重新词性标注五步。该分词器速度快,精度高,受到各界的一致好评。针对于微博短文本的特点,对分词后的短文本特征向量进行进一步的数据预处理,例如去除分词后少于3个词的短文本特征向量。得到经过数据预处理的短文本特征向量后,下一步就对么一个词语进行计算权重。在这里需要介绍三个重要的概念:词频TF,逆向文档频率IDF以及时间窗。一个是词频即指一个词在一个文档中出现的次数,用词频作为构成权重一个指标的潜在意识是认为一个词在一篇文章中出现的次数越多越重要。当然对很多词来说是符合这个潜台词所指意义的,然而并不是所有出现次数很多的词都重要。有些停用词在文档中出现很多次但是并不重要。因此另外一个重要的衡量指标出现了,它就是逆向文档词频IDF,其中DF表示词语在一组文档中的多少个文档出现过,IDF表示词语出现的文档占总文档的比例。通常词语的权重由TF和IDF组合来表征。最后一个时间的概念是专门针对微博实时性以及短文本特性的,通过时间窗来计算词频的增长率可以看出该词是否是潜在的主题词。通过计算权重最终可以获得单位时间窗内的主题词列表。最后通过K-means聚类算法与词共现原理相结合对主题词列表进行短文本聚类,获取热点话题进而分析相关舆情。4.4舆情展示功能设计舆情展示分为四部分,分别是:热点话题展示,舆情趋势分析,爬虫管理,系统管理。

图4-7 前台展示模块本系统前端采用SSH框架+OpenFlashChart2开发,SSH框架是一种MVC模式架构,具有解耦合,可维护,最大限度复用的优点。其中M代表模型层,这一层的主要任务是封装对象,与数据库表产生映射关系方便对数据库的访问以及接受访问数据库返回出的信息;C代表控制层,这一层主要是处理应用程序与用户交互的部分,负责从视图层获取信息,向模型输入数据,或者拿到从数据出返回的信息将其封装成模型返回视图层;V代表视图层,是要是处理系统显示的部分,依据模型数据进行创建,本系统采用JSP来进行展示。OpenFlashChart2是一个基于Flash的开源报表组件,能够动态的生成各种线图,饼图,柱状图,可以很好的进行可视化的展示。图4-8SSH框架图前端系统主要具有以下功能:实现用户的登录、用户信息的管理。可以直观的查看到某一时间段内的热点话题以及其热度和相对应的微博页面。可以对爬虫进行管理,开启爬虫程序,单一的输入初始URL或者以TXT文件形式输入初始URL。可以对关键词的趋势进行分析,展示发布相关微博的用户的地域分布情况,展示关键词的相关用户的认证情况。4.5本章小结介绍了舆情监测与分析平台的模型设计,包括需求分析、总体流程以及系统体系结构。并简单介绍了信息采集模块,基于K-means算法和词共现的信息分析模块以及舆情展示模块。第5章 系统实现本系统的开发环境如下:硬件环境:系统拓扑结构采用B/S架构,CPU主频2.5GHz,内存12G,硬盘可扩展,PC端采用普通计算机即可。软件环境:操作系统为Windows7,数据库采用Mysql5,应用web服务器采用Apache-tomcat6版本。开发语言为Java语言,开发平台为EclipseLuna4.4.1版本。5.1信息采集功能实现5.1.1微博模拟登陆(1)微博模拟登录分析过程在很多情况下,网站的访问都需要用户登录后才可以访问资源,要想通过网络爬虫获取微博页面的信息就需要通过模拟登陆来实现。对于新浪微博的模拟登陆主要利用Fiddler进行抓包分析后,利用HttpClient进行模拟登录,模拟登录的重点是获取页面的跳转以及cookie的保存。实现微博模拟登录另外一个需要注意的情况是登录的过程是随时可能发生变化的,在以后如果需要实现模拟登录需要根据当时的抓包分析情况后再进行登录,但是大致的原理是一致的。如图5-1描述了模拟登录分析的大致流程。图5-1模拟登录分析流程图1.首先利用Fiddler抓包分析软件进行分析,首先打开Fiddler软件,然后打开浏览器,在浏览器地址栏输入。Fiddler会自动开始记录和分析所有的http请求和http响应。软件界面如图5-2所示左侧为会话列表,右侧上部为对应的会话的HTTP请求,下部为对应的HTTP响应: 图5-2Fiddler软件截图2.我们在浏览器地址栏输入后,通过观察会话列表,服务器端会进行不断的跳转,从不同的位置向客户端返回所需资源以及登录所需资源。重要的交互记录如图5-3所示,选中的会话为微博预登陆,该会话会返回稍后登录所需的几个参数:图5-3预登录会话选中的部分从/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=&rsakt=mod&client=ssologin.js(v1.4.18)&_=1387782049912站点GET到一些稍后登录所需的参数,将该网址输入浏览器会获得如图5-4所示响应:其中servertime,nonce,pubkey都是用于密码加密以及登录所用的。图5-4 返回参数3.在浏览器输入账号密码进行登录,首先客户端会向/sso/login.php?client=ssologin.js(v1.4.18)提交参数,http请求参数如图5-5所示,其中su表示POST的账号,已经经过BASE64加密,sp为加密后的密码,加密过程是经过三次SHA1加密,其中加入了之前获取的servertime和nonce的值。通过查看/signup/signin.php的源码可以找到用于加密的JS文件ssologin.js,通过向该JS文件传入pubkey,servertime,nonce,password四个参数就可以获得三次SHA1加密后的sp。图5-5提交参数4.通过上一步的POST请求,查看所返回的HTTP响应报头。如图5-6所示,服务器端已经返回cookie,这些cookie就记录这用户登录信息,此后再访问其他人的主页或使用微博的应用,服务器就可以通过cookie来检测用户的状态了。图5-6返回cookie列表此时虽然已近获取cookie,但是还没有登录结束,通过观察响应实体,服务器再次进行了页面跳转,如图5-7所示响应实体部分:图5-7响应实体实体部分中将进行页面跳转,跳转页面为实体中location.replace()包含的url,通过再次请求该url,会返回HTTP状态码为302的提示,服务器会自动再次进行跳转到/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&sudaref=。5.最后,就是新浪的SSO登录了,服务器会再次的访问。在次过程中因为cookie已经写入,登录服务器后会返回302,自动跳转到用户的主页面。至此,分析模拟登陆的过程就完全结束。在实际利用代码进行登录的时候,需要注意的是,在获取cookie以后的所有的页面跳转和页面请求都需要保持cookie。(2)微博模拟登录实现微博模拟登录使用Httpclient4.3辅助开发。该组件是一个提供了高效的HTTP协议的客户端编程工具包,相对于JDK自带的URLConnection,更加具有易用性和灵活性,不仅使客户端发送HTTP请求更加容易,也方便了开发人员测试接口,提高了开发效率,也方便提高代码的健壮性。图5-8为实现微博模拟登录核心类WeiboRobot结构图5-8类结构图微博登录完整阶段可以分为三个阶段:第一步就是预登录,是类WeiboRobot中的prelogin()方法。该阶段主要是对用户名进行BASE64加密,然后构造URL发送请求。目的是获取服务器端参数servertime,nonce,pubkey,rsaky用以后续密码的加密以及登录使用。第二步是对密码进行加密,新浪微博目前为止对密码加密是采用SHA算法加密。通过上节模拟登录分析,我们可知可以从/signup/signin.php的页面源码获取加密文件ssologin.js。查看JS文件,我们可以看出对密码的加密方式是先进行两次的SHA加密,然后传入第一步获取的servertime,nonce,pubkey再进行一次SHA算法加密。至此,就完成了对密码的加密工作。第三部就是真正的登录工作了,通过上节的分析过程,该步骤首先就是要设置参数,其中就包括第一步获取的su,servertime,nonce,pubkey以及第二步经过加密的密码sp以及其他固定的参数,如图5-9所示。然后执行发送请求就可以获取cookie,然后经过一系列的页面跳转执行,最终成功登录。以获取cookie,然后经过一系列的页面跳转执行,最终成功登录。Stringurl-"/sso/login.php?client-ssologin.jsCvl.4.II)1';//设置参数List<NameValuePair>parms■newArrayList<NameValuePair>;parms.add(newBasicNameValuePairC"entry,'t"weibo"));parms.add(newBasicNameValuePair("gateway",”1"));parms.addCneviBasicNameValuePair(,'from,',parms.add(newBasicNameValuePair("savestate”,"7parms.add(newBasicNameValuePair("useticket","lparms.addCnewBasicNameValuePair("pagerefer1',"http://login.sina.com.cn/sso/logout.php?entry-miniblog&r-http%3AX2F%2Fweibo.comS62Fparms.addCnewBasicNameValuePairC'vsnfMparms.addCnewBasicNameValuePair("su",su));parms.addCnewBasicNameValuePair("service","miniblog"));parms.addCnewBasicNameValuePairC,servertime"fservertime♦parms.addCnewBasicNameValuePair("nonce",nonce));porms.add(newBasicNomeValuePairC'pwencocJe"Vsa2"));parms.addCnewBasicNameValuePairC'rsakv",rsakv));parms.addCnewBasicNameValuePair(,'sp",sp));parms.addCnewBasicNameValuePairC'encoding,',"UTF-8"));parms.addCnewBasicNameValuePairCprelt*',"187"));parms.addCnewBasicNameValuePairC"url"/ajaxlogin.php?framelogin-l&callback-parent.sinaSSOController.feedparms.addCnewBasicNameValuePair(,'returntype","META"));图5-9设置参数5.1.2信息采集信息采集系统通过研究开源爬虫框架Nutch、Crawler4j和WebCollector爬虫内核,结合Nutch内核+插件的机制以及Crawler4j良好的用户接口的优点,研究实现了一套针对微博的多线程网络爬虫。下图5-10为针对微博的多线程网络爬虫的类图:图5-10新浪微博网络爬虫类图上图列举了新浪微博网络爬虫的核心类图,它们之间的大致流程为Injector->Generator->Fetch->Visitor->DbUpdater。下面详细介绍采集的原理和流程。首先就是将初始种子URL放入Injector的种子列表,在任务启动时,系统会自动向数据库写入初始URL,本文系统利用嵌入式数据库BerkeleyDBJavaEdition在系统运行时进行URL的存储。StandardGenerator是具体的任务生成器,它的作用是从数据库中获取爬取任务CrawlDatum,并进行正则匹配,去重等过滤功能,然后将任务交给微博爬虫的最核心的类抓取器Fetcher,Fetcher是利用内部静态类QueueFeeder通过任务生成器获取任务并存储在FetchQueue等待队列中,最后交给Fetcher内部静态类FetcherThread进行多线程的爬取。在爬取的过程中会对网页进行URL解析,并且将获取到的链接更新到数据库中,并将网页信息发送给网页信息类UserHomePage,最后网页解析器会对发送过来的网页信息进行解析,将所需的信息进行抽取和存储。在爬取过程中由于新浪微博反爬虫机制应该注意爬取间隔和线程数量的控制并且使用多个账号,尽量避免账号被限制或者被冻结。一般的web网页主要组成元素为html,head,body,其中信息量最大的为body部分,利用Jsoup可非常轻松的解析网页,获取到所需的信息。但是在实际操作过程中,应该注意微博的个人主页基本上的body内容都是JS代码生成的,对于这种情况,Jsoup就有些力不从心了,因为Jsoup没有提供能够执行JS代码的引擎,没有办法提取出JS代码生成的网页内容。如图5-11为爬取到的个人微博主页的源代码:<script>FM.view({"ns":"pi.content.homefeed.index",''domid":"v6_pl_content_homefeed","css":["style/cs*<script>FM.view({"ns":"pi.content.bubbleTip.index","domid*':"v€_pl_guide_bubbletip","css":□,"js":["J<script>FM.viewC{,'ns":"pi.content.hotdesktoptip.index","domid":,,v6_pl_content_hometip,',''css":□,Mjs1<script>FM.viewCI^ns":"pi.third.right.index","domid":"v6_pl_rightmod_recominfo","css":["style/css/m<<script>FM.view({"ns,':,"domid":"v6_pl_rightmod_ads36",''css1':["style/css/module/global/WB_ad.css?v*<script>FM.viewCt^ns":,'v6_trustPagelet_recom_member,'t"domid,':,,v6_trustPagelet_recom_member,',"css1':C<script>FM.view({,,ns":"pi.content.changeLanguage.index"t"domid":"plc_bot","css":□»"js":[nhome/js/pl<script>FM.view({"ns":"pi.guide.tacCountTips.index,',,'domid,':,'v6_pl_guide_homeguide,',''css*':□,"js":[*<script>FM.viewC{"ns":"pl.base.index","domid":"pl_comrnon_base","css":□js":["home/js/pl/base/inde)<script>FM.viewCf^ns":,"domid":"v6_pl_ad_bottomtip,'t"css1':["style/css/module/global/WB_ad.css?verj图5-11个人微博主页源代码通过上图可以清晰的看到,个人微博主页的源代码的body部分基本上都是JS脚本,仔细分析该段代码,可以看出里面包含着一个JSON字符串,因此可以通过字符串操作取出JSON,然后通过对JSON对象的操作来解析网页以获取信息。5.2信息分析功能实现5.2.1数据预处理数据预处理是数据挖掘中极为关键的一步也是最为基础的一部。因为对于原始数据,由于数据来源不单一,格式复杂不统一,噪声数据,无效数据的存在,会严重影响聚类的效果。对微博数据来说更是如此,微博数据中对于热点话题的抽取来说还有大量的无用数据,类似于广告微博、个人性微博等,在进行主题词抽取之前,需要对这类的数据进行筛选。原始数据中各数据项的含义见表5-1:表5-1数据项含义预处理主要进行一下筛选:1)去除“#话题名#”,“【话题名】”,这种话题通常由微博平台或者人为发布,如“#微感动#”,“【休闲风】”,由于其人为因素较大,会使主题词的抽取会产生较多的广告词以及人为高频词,最终导致聚类效果有较大的误差。2)去除“@用户名”格式的信息。这种格式的信息通常是普通用户之间的随意聊天式的信息,包含有热点话题的可能性较小,上下文联系不明显,有可能会对聚类效果产生影响,因此需要去除。3)去除粉丝数和关注数之和小于某值的信息。这类用户基本上属于僵尸用户或者是专门用作广告营销的微博用户,他们所发布的微博信息通常都是广告,不会包含有热点话题的信息。4)去除含有Url链接的微博,通过前期数据处理发现,大部分含有Url链接的微博为广告微博。5)去除微博中表情符号,例如“[抽泣][给力]”等,这一类的微博中所包含的表情符号并不能直观的反应出具体的事件,无法抽取出相应的文本,并且有可能会对聚类结果产生影响。另外由于本文对于主题词的方法是基于时间窗的划分的,所以我们还需要对所有的微博进行时间划分。具体实现类为CsvFileParserToSplitedTxts,类结构如图4-12:其中timeWindowSize为设置时间窗的变量。以上五个筛选步骤重要是通过正则表达式来过滤的。正则表达式如下:匹配#话题名#、@用户名以及【话题名】的正则表达式:‘#.*#|@|【。*】’;匹配含有URL链接的正则表达式:‘/([a-zA-Z0-9{4,7}])’;匹配微博中表情符号的正则表达式:‘\\[.+?\\]’;图5-12CsvFileParserToSplitedTxt类结构图经过原始数据去噪处理后,第二步就是对数据进行中文分词,广告词过滤。中文分词器有很多不同的算法和不同个人和机构开发的工具。本文采用孙健开发的开源的Ansj中文分词器,它是一款纯JAVA的,主要应用于自然语言处理,高精度的中文分词工具,可用于人名识别、地名识别、住址机构名识别、多级词性标注、关键词提取、指纹提取等,支持行业词典,用户自定义词典。本文采用该中文分词器主要原因为开源,可根据自身需求进行更改,并且小巧十分具有易用性和灵活性。通过大量的观察原始数据,可是发现有很多的广告微博,主要是一些账号进行的微博营销以及人们转发的广告微博,这些微博意义不大并且对于主题词抽取有很大的负面影响,因此需要对此类微博进行过滤,部分广告词如图5-13所示。图5-13广告词表每条微博经过分词后,会得到一个词向量,查看广告词表,如果该词向量包含三个不同的广告词就认定该微博为广告

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论