基于Spark的Web文本挖掘系统的研究与实现 计算机专业_第1页
基于Spark的Web文本挖掘系统的研究与实现 计算机专业_第2页
基于Spark的Web文本挖掘系统的研究与实现 计算机专业_第3页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

第1章绪论1.1研究背景互联网自诞生以来就对各行业和人们的生活方式产生着深刻的影响,而今更甚,网民规模在移动互联网兴起后更是发生了爆炸式的增长。根据2017年1月中国互联网信息中心(CNNIC)发布的第39次《中国互联网发展状况统计报告》截至2016年12月,我国网民规模达7.31亿,普及率达到53.2%,超过全球平均水平3.1个百分点,超过亚洲平均水平7.6个百分点\o""[1]。全年共计新增网民4299万人,增长率为6.2%。中国网民规模已经相当于欧洲人口总量。随着web2.0技术的不断发展,互联网上出现了如微博、微信、论坛等各类大型的社交平台。特别是新浪微博,自诞生起就以鲜明的开放性进入大众的生活中。移动互联网的高速发展更是推动了其发展。新浪微博数据中心发布的《2016年度微博用户发展报告》显示,据2016年微博发布的第三季度财报中显示,截止2016年9月30日,微博月活跃人数已达到2.97亿,较2015年同期相比增长34%;其中9月份移动端在MAU总量中的占比为89%;9月的日活跃用户达到1.32亿,较去年同期增长32%。从以上数据可以看出新浪微博在网络意见汇聚和传播中起了非常重要的作用,已经成为舆情发展的主要媒介。因此,微博热点可以作为当前社会舆论热点的一个侧面体现。截至2016年12月,中国的网页数量约为2360亿个,年增长11.2%,数量较2010年增长了近四倍。面对如此海量的数据,传统的以人力驱动的文本挖掘系统其有限的处理能力已不再适用。大数据技术的出现让我们对海量数据进行快速处理成为了可能,其中ApacheSpark是当前流行的大数据处理模型,具有快速、通用、简单等特点。Spark是针对MapReduce在迭代式机器学习算法和交互式数据挖掘等应用方面的低效率,而提出的新的内存计算框架,既保留了MapReduce的可扩展性、容错性、兼容性,又弥补了MapReduce在这些应用上的不足。1.2研究现状1.2.1文本挖掘技术文本挖掘也称文本中的知识发现,是数据挖掘方法在文本数据集上的运用旨在从大量非结构化的文本集合中挖掘信息、发现知识。它是一个跨学科的交叉研究领域,涉及机器学习、自然语言处理、统计学等多个领域的知识和方法。近年来,随着数据存储技术和互联网的不断发展,数据正以前所未有的速度迅速增长和积累,特别是社交媒体的用户每天都在创造大量的文本信息。这些数据一定程度上记录了人们的行为态度、交往过程和互动关系,为研究人们的社会化行为提供了新的可能。社会科学研究方法是我们认识各种社会现象及事物的途径,是我们获取知识的重要方式。文本挖掘可以利用机器学习、自然语言处理等计算机技术从大量文本数据中发现模式、规律、趋势等,为学者以定量手段进行社会科学研究提供新的方法。社会计算的目的便在于架起自然科学与社会科学之间的桥梁,借助计算机技术形成一套完整的社会科学定量分析研究手段。基于此,文本挖掘在社会科学领域研究中的应用得到了学者们越来越多的关注。相关研究表明,近年来国际上关于文本挖掘的研究论文呈不断上升趋势,且主要集中在自然科学领域。王继成、潘金贵、张福炎于2000年在论文《web文本挖掘技术研究》中提出了一种才用多个agent体系结构的web文本挖掘系统原型WebMiner.WebMiner。将多维文本分析与文本挖掘这两种技术有机地结合起来,以帮助用户快速、有效地挖掘Web上的HTML文档。陈建华、包煊于2010年在论文《Web挖掘系统的设计与实现》中从文本挖掘定义、挖掘任务、挖掘分类等方面介绍了挖掘理论。在分词中采用了近邻法来减少训练样本集中的样本数量来加快算法的执行速度。胡健、杨炳儒等人于2008年在论文《基于非结构化数据挖掘结构模型的Web文本聚类算法》中提出了一种新的Web文本聚类算法——基于DFSSM的Web文本聚类(WTCDFSSM)算法。该算法可以对各类远程教育站点上收集的文本资料信息自动进行聚类挖掘;采用网格结构模型,帮助人们进行文本信息导航;从海量文本信息源中快速有效地获取重要的知识。黄晓斌、赵超于2009年在论文《文本挖掘在网络舆情信息分析中的应用》中介绍了网络舆情的特点与作用,分析了文本挖掘技术的主要功能,提出网络舆情信息挖掘分析模型,并以实例说明文本挖掘在网络舆情分析中的应用。1.2.2大数据处理技术当今时代是一个信息爆炸的时代,每时每刻都有大量的数据被生产、搬运和应用。为了解决原来越多海量数据的专业化、规模化加工问题,挖掘数据蕴藏的价值,大数据处理技术应运而生。初代大数据并行处理框架Hadoop应用最为广泛,但是随着大数据领域的研究和实践不断的深入,也暴露出一些问题,如不适合低延迟数据访问、不能进行迭代式数据处理等缺点。Spark基于内存计算,自2013年成为Apache基金项目后高速发展,凭借其高效的数据处理能力和对实时、交互式数据访问的支持逐渐成为新一代的大数据处理引擎。其最新版本Spark2.1的机器学习库中包含了丰富的数据挖掘相关算法,如LDA,聚类算法K-means、分类算法朴素贝叶斯等。能够轻松应归常规的大规模文本挖掘场景,并具有很好的效果和很高的效率。但是,作为一种新兴的技术,面对多元的复杂的文本挖掘需求,还是有一定改进的空间。1.3文章的内容及意义本文的主要内容包括了以下几点:介绍了文本挖掘的含义以及具体的实现过程,并特别针对社交网站的文本挖掘的相关知识进行了学习和研究,包括了高效的用于新浪微博文本数据采集的网络爬虫技术,用于文本挖掘处理的大数据处理技术以及对挖掘结果进行直观展示的数据可视化技术。对用于大规模文本挖掘的大数据相关技术进行了研究,包括并行计算框架Spark、分布式存储系统HDFS。对文本挖掘相关算法进行了研究。实现了一个基于Sprak用于社交网站舆情领域的文本挖掘系统,能够快速准确地对海量的消息进行处理,得到准确的分析结果。构建了对挖掘后数据的可视化系统,提供数据的直观展示和用户交互的处理。第2章相关知识与技术介绍本章介绍了web文本挖掘系统的设计与实现的相关技术,文本挖掘的实现流程和步骤,网络爬虫数据采集程序,数据的储存与计算平台,以及数据的采集和可视化相关技术。2.1网络爬虫网络爬虫是一种按照一定规则自动地抓取互联网信息的程序或者脚本。一般来说,网络爬虫可以分为通用网络爬虫、聚焦网络爬虫、增量试网络爬虫一集DeepWeb爬虫四种。其中通用网络爬虫一般作为搜索引擎的数据抓取部分。网络爬虫同样是数据挖掘中数据集的重要来源之一。网络技术迅速发展,互联网则是大量信息的载体,怎样高效地提取和利用这些信息成为了一个很大的挑战。通用网络爬虫的特点是尽可能的提高网络覆盖率和抓取速率,有可能返回大量与需求不相关的内容,这种方式在处理结构复杂的信息时也有些吃力。因此部署运行爬虫的有限资源与近乎无限的互联网信息就存在很大矛盾。为了解决这些问题,提高数据采集效率,定向爬取网络资源的聚焦爬虫应运而生。它选择性地爬行那些与预定好的主题相关页面的网络爬虫。这样的做法和通用爬虫相比可以极大的节省网络和硬件资源,同时抓取到的数据也具有更高的质量,不但减轻了后续数据清洗的工作量还有助于对信息进行进一步的挖掘。爬虫的一般工作流程是:从把精心挑选的初始URL放入待爬队列开始爬取,不断扫描解析网页,从中抽取信息及URL,将其存入数据库,再从扫描到的新URL进行新一轮的爬取,如此循环这个过程,就能达到采集大量信息的目地。聚焦爬虫的工作流程较为复杂,需要根据一定的搜索策略从队列中选择下一步要抓取的URL,并重复上一过程,直到打到系统的某一条件时停止。另外,所有被爬虫抓取的网页还会被系统储存,进行一定的分析过滤,并建立索引,以便以后的查询和检索,此外这个过程得到的分析结果还可能对以后的抓取过程给出反馈和指导。图2.1.1爬虫执行流程2.2文本挖掘文本挖掘是利用数据挖掘方法在文本数据集上的运用,旨在运用计算机技术从大量非结构化的文本集合中抽取、归纳文本内容,帮助人们从海量的文本数据集中发现有价值的信息和知识。实现的流程如图2.1所示:图2.2.1文本挖掘流程1.数据清洗互联网上的文本数据巨大且形式不尽相同,为了使文本挖掘的效率更高结果更准,在使用挖掘算法对数据源进行挖掘处理之前必须对采集到的源数据进行数据清洗。其过程可以简要概括去除文本标记、分词、去除停用词三个步骤。去除文本标记:网站上的文本数据大都以HTML和XML格式进行保存,其中包含大量用于格式化文本的标签。不仅如此,文本自身也含有大量标点符号、特殊字符以及空格等。去除文本标记的目的就是去除这些对文档完整性没有影响的部分,减少可能对挖掘结果造成的干扰。分词:分词是进行中文文本挖掘的基础和比较关键的步骤,常用的方法有词库对比和词频统计。其中基于词频统计的方法通过分析文本进行分词,不依赖词典,效果较稳定,而词库分词的效果则受词典质量影响会有明显波动。去除停用词:去除文本中的“的”、“地”、“得”这类虚词,这些词语只用来标识自然语言中的语法关系而并不会对文本内容的实际意义造成影响。2.文本表示很多文本数据无法直接被计算机处理,需要将文本转换成计算机能够识别的语言,用来获取初始的文本特征集。布尔模型和空间向量模型是文本表示的两种主要模型。其中布尔(Boolean)模型是基于集合论和布尔代数的一种简单检索模型。它的特点是查找那些于某个查询词返回为“真”的文档。在该模型中,一个查询词就是一个布尔表达式,包括关键词以及逻辑运算符。通过布尔表达式,可以表达用户希望文档所具有的特征但完全匹配会导致太多或者太少的结果文档被返回。而向量空间模型(VSM)把对文本内容的处理简化为向量空间中的向量运算,并且它以空间上的相似度表达语义的相似度,直观易懂。当文档被表示为文档空间的向量,就可以通过计算向量之间的相似性来度量文档间的相似性。3.特征选取对文本进行语言学处理和数学处理后得到的结果,包括词性、词频、TF-IDF分数等都可作为文本的特征使用。比如向量空间模型可以直接使用TF-IDF分数作为特征,通常,针对不同的任务,可以使用不同的特征,比如情感分析会附带上情感词典(比如正面-情感词的百分比、负面-情感词的百分比、每个句子中否定词个数、每个句子中程度副词个数、每个句子特殊标点符号个数)作为新的特征。序列标注模型,会使用序列边界与否作为新的特征。

获取新的特征后,可以使用传统机器学习的降维方法,对数据进行筛选和降维,比如主成分分析算法(PCA)、局部线性嵌入(LLE)、LDA、LaplacianEigenmaps拉普拉斯特征映射等。2.3分布式存储系统——HDFSHDFS(HadoopDistributedFileSystem)是Apache基金会Hadoop项目的一个子项目。它是一个高度容错的分布式文件系统,设计用于在低成本硬件上使用。它屏蔽了具体的技术细节,从最终用户的角度来看,他就想传统的文件系统一样,可以通过目录路径对文件执行各种操作。HDFS主要有以下几个特点:HDFS适合储存大量文件,总储存量可以达到PB,EB级。HDFS也适合存储单个的文件,单个文件一般在百兆级别以上,不大适合处理大量的小文件。基于廉价的普通硬件,可以容忍硬件出错。系统中的某一台或几台服务器出现故障的时候,系统仍然可以利用备份保证数据的完整性。基于简单的一致性模型,HDFS应用程序需要满足一次写入,多次读取一个文件的访问模式,支持追加操作,但无法对已经存在的数据进行修改。支持顺序的数据流访问,HDFS适合处理批量数据而不适合用于随机定位访问。同时,它侧重高吞吐量的数据访问,可以容忍数据的高延迟,不大适合需要低延迟数据系统的构建由于分布式存储系统的性质,HDFS集群拥有一个NameNode和多个DataNode。NameNode管理文件系统的元数据,DataNode存储实际的数据。客户端通过同NameNode与DataNodes的交互访问文件系统。客户端向NameNode发送请求以获取文件的元数据,而真正的文件I/O操作是直接和DataNode进行交互的。图2.3.1HDFS架构2.4大数据处理框架SparkSpark于2009年诞生于加州大学伯克利分校AMPLab。目前,已经成为Apache软件基金会旗下的顶级开源项目。它和Hadoop的MapReduce计算框架类似,但是相对于MapReduce,Spark凭借其可伸缩、基于内存等特点以及可以直接读写Hadoop上任何格式数据的优势,进行批处理时更加高效,并且具有更低的延迟。Spark已经成为轻量数据快速处理的统一平台,各种不同的应用,如实时流处理,机器学习,交互式查询等,都可以通过Spark建立在不同的存储和运行系统上。2.4.1Spark核心组件以Spark为核心的整个生态圈,最底层为分布式存储系统HDFS、AmazonS3、Mesos,或者其他格式的存储系统(如Hbase,Hive等);资源管理采用Mesos、YARN等集群资源管理模式,或者Spark自带的独立运行模式,以及本地运行模式。在Spark大数据处理框架中,Spark为上层多种应用提供服务。例如,SparkSQL提供SQL查询服务,性能比Hive快3~50倍;MLlib提供机器学习服务;GraphX提供图计算服务;SparkStreaming将流式计算分解成一系列短小的批处理计算,并且提供高可靠和吞吐量服务。值得说明的是,无论是SparkSQL、SparkStreaming、GraphX还是MLlib,都可以使用Spark核心API处理问题,它们的方法几乎是通用的,处理的数据也可以共享,不仅减少了学习成本,而且其数据无缝集成大大提高了灵活性。图2.4.1Spark核心组件2.4.2弹性分布式数据集——RDDSpark的核心概念是RDD,全称为ResilientDistributedDatasets,是一个容错的、并行的数据结构,可以分布在集群的节点上,以函数式编程操作集合的方式进行各种并行操作。可以将RDD理解为一个具有容错机制的特殊集合,它提供了一种只读、只能有已存在的RDD变换而来的共享内存,然后将所有数据都加载到内存中,方便进行多次重用。RDD是弹性的,当内存不足时它还可以与磁盘进行数据交换。RDD的实质是一种更为通用的迭代并行计算框架,用户可以显式地控制计算的中间结果并用其再次进行后续的计算。2.4.3Spark工作流程Spark的任务从创建SparkApplication的运行环境——启动SparkContext开始,在SparkContext的初始过程中会分别创建DAGScheduler作业调度和TaskScheduler两级任务调度模块。随后SparkContext向资源管理器(根据实际情况确定,可能是Standalone、Mesos、Yarn)申请Executor资源,再由资源管理器分配资源并启动StandaloneExecutorBackend,executor,之后向SparkContext申请Task。DAGScheduler将job划分为多个stage,并将Stage提交给TaskScheduler,Tsak在Executor上运行,运行完毕后将释放所有资源。图2.4.2Spark工作流程2.4.4Spark的优势①快速处理能力。Spark允许将中间输出和结果存储在内存中,节省了大量的磁盘IO。同时Spark自身的DAG执行引擎也支持数据在内存中的计算。根据Spark官方的数据,Spark性能大约比Hadoop高了100倍,即使内存不足需要磁盘IO,这时也要比Hadoop快上十倍。②易于使用。Spark现在支持Java、Scala,Python和R等语言编写应用程序,大大降低了使用的门槛。自带了80多个高等级操作符,允许在Scala,Python,R的shell中进行交互式查询。③支持流式计算。与MapReduce只能处理离线数据相比,Spark对实时的流计算提供了支持。SparkStreaming提供了对数据实时处理功能的支持,其流式处理能力还要强于Storm。④可靠性高。Spark自身实现了Standalone部署模式,在这种模式下,Master节点可以有不止一个,解决了Master节点可能出现故障的问题。⑤丰富的数据源支持。除了对操作系统自身的文件系统和HDFS提供了支持,Spark还很好地支持了Cassandra,HBase,Hive等作为数据源。2.5数据可视化海量数据的涌现,数据过剩和信息超载等问题促使了数据可视化技术的出现。数据时代数据可视化成为理解和表达数据的有效手段甚至是唯一手段。数据可视化主要旨在借助图形化的手段,清晰有效地展现与传达信息。一方面,数据赋予可视化以意义。另一方面可视化增加数据的灵性,两者相辅相成,帮助人从信息中提取知识、从知识中收获价值。文本可视化是数据可视化的一个子命题,其大致流程如图2.5.1所示。文本可视化涵盖了信息收集、数据预处理、知识表示、视觉呈现和交互等过程。其中,数据挖掘和自然语言处理等技术充分发挥计算机的自动处理能力,将无结构的文本信息自动转换为可视的有结构信息。可视化呈现可以让人类视觉认知、关联、推理的能力得到充分的发挥,为人们更好的理解文本和发现知识听过了新的有效途径。文本文本分析信息收集数据预处理知识表示可视化呈现可视化呈现视觉交互视觉编码操作数据图2.5文本可视化基本框架第3章挖掘算法研究本章为web文本挖掘系统的实现作了算法的研究,在热点内容的抽取上,准备采用经典的特征提取算法TF-IDF算法。3.1TF-IDF算法3.1.1TF-IDF算法介绍TF-IDF算法是一种用于信息检索与文本挖掘的常用加权算法,可以用于一个词在一个文件或者一个文件对于一个语料库的重要程度的评估。字词的重要性随它的文本中出现的频数成正比增加,同时还会随着她在语料库中出现的频率成反比下降。在一个给定的文件里,词频(termfrequency,tf)指的是给定的词语在该文件中出现的频率。它是对词数(termcount)的归一化,避免更偏向于长文本。(文本越长同一个词语在该文件内可能会比在较短的文件内有更高的词数,与该词的重要程度无关。)对于在某个特定文件的词titfi,j=ni,jkn在以上式子中ni,j是该词在文件dj中出现的次数,分母为文件逆文件频率(inversedocumentfrequency,idf)是度量一个词语普遍重要性的参数。某一个特定词语的idf,可以由总文件数目除以包含该词语文件的数目,将其商进行取对数运算得到:idfi=logDj:t其中D表示语料库中的文件总数,j:ti∈dj表示包含词语ti的文件数目(最后tfidfi,j值由tfi,j值与tfidfi,j=tfi,j×idf在某一特定文档内有高词频,以及该词在整个文档集合中有着低文件频率,那么该词将有高权重的tf-idf值。3.1.2TF-IDF算法的理论依据及不足TF-IDF算法创建在这样一个假设之上:对区别文档最有意义的词语应该是那些在文档中出现频率高,而在整个文档集合(语料库)中出现频率少的词,所以如果特征空间坐标系取tf词频来作为测度,就能体现同类文本的特点。另外考虑到单词有区分不同不同类别的能力,TF-IDF算法认为一个词出现的文本频数越小,他区别不同文本的能力就越强。因此引入了逆文本频度idf的概念,以tf和idf的乘积作为特征空间坐标系的最终测度,并用它完成多权值tf的修正,调整权值的主要目的是突出重要单词,抑制次要单词。但是在本质上idf是一种试图抑制噪声的加权,并且单纯地认为文本频率小的词更重要,文本频率大的词就更次要,显然这不是完全正确的。idf的简单结构并不能完全准确地反映单词的重要程度和特征词的分布状况,因此它并不能很好地完成对权值的修正功能,因此TF-IDF算法的精度并不是很高。3.1.3算法的改进思路在实际应用中,我们可以人为地增加判别条件对部分词语进行加权处理。例如词语在一句话中的位置,我们可给在句首、句中、句尾的词语分别赋予不同的额外权值,通过一定的公式计算,对出现在这些位置的词语进行加权操作。此外,词语带有的符号修饰也值得关注,例如在互联网网页文本数据中,我们可以根据不同的标签对其中词语进行不同的加权处理。微博文本数据中,我们可以根据消息自带的话题标签对该词进行加权。通过类似这样的加权方式,我们可以尽可能修正原生算法得到的权值,从而得到更加切合实际的执行结果。第4章系统总体设计 本章的目标是完成一个基于Spark的Web文本挖掘系统的设计。该系统以社交网站(新浪微博)舆情信息作为文本挖掘的对象,以并行计算框架Spark作为计算平台,实现对网络舆情热点的文本挖掘工作。4.1系统需求概要系统功能的主要目标可以概括成以下内容:系统能够完成大量互联网社交网站(新浪微博)上的舆情信息生成文本数据集,利用并行计算框架Spark按照一定的挖掘算法对采集到的文本进行挖掘,对当前舆情热词进行抽取,最终通过web页面方式对挖掘结果进行数据可视化操作。4.1.1文本采集Web信息有着数量很大,更新很快及规范性较差的特点,用户自行采集、存储数据有着很大的难度,也很难对采集的格式进行统一,因此,系统需要提供文本采集模块,能够自动完成网页的解析以及文本采集工作。4.1.2数据存储由于系统所使用的数据集较大以及存储系统需要与Spark进行对接,所以存储系统需要能够很好地支持大规模文件的批量读取操作,此外还要能够对交互式查询进行良好的支持。4.1.3文本分析文本分析功能需要为用户从已经采集到的海量的文本数据集中快速、准确地抽取出热点内容。4.1.4结果可视化结果可视化功能需要实现将文本分析的结果高效、清晰地传递给用户,通过一定的交互手段让使用者能够很快了解分析的效果。4.2系统设计概要4.2.1系统架构设计根据对系统功能需求的分析,决定系统基于B/S架构进行构建,系统架构设计图如下:服务器端Internet服务器端Internet数据采集数据存储用户交互响应可视化生成浏览器端文本挖掘图4.2.1系统架构设计图数据采集、数据存储以及文本挖掘功能均在服务器端实现。数据采集功能负责解析网页,从互联网上抓取目标数据。数据存储功能需要将采集程序得到的大规模数据进行存储,以备挖掘使用。文本挖掘功能包含文本清洗和去停用词以及特征提取几个步骤,最终实现从采集到数据中抽取热点信息。浏览器端是终端用户与系统的交互接口,根据用户交互动作与服务器端进行通信,从而反馈相应信息到浏览器端。随后将从服务器端返回的挖掘结果进行可视化处理,便于用户查看。并根据用户需求返回相关原始信息。4.2.2系统模块划分与技术选取根据系统架构设计,可将系统所有功能拆分为三个主要的功能模块,其中数据采集模块主要负责网页解析和目标信息的抓取,文本挖掘模块负责采集数据的存储以及对采集数据的分析挖掘。文本数据可视化模块负责将挖掘用户交互及结果展示。文本文本挖掘Spark数据查询Elasticsearch数据存储Mongodb/HDFS爬虫程序Scrapy数据可视化Django文本数据集用户请求数据文本挖掘模块数据采集模块图4.2.2系统模块划分数据采集模块采用了Python语言下基于Twisted异步网络库的网络爬虫框架Scrapy进行编写。由于具有并发抓取的特性,因此基于Scrapy编写的网络爬虫能够快速准确地将需要的结构化的数据从网页中解析抽取出来,然后将其进行存储。文本挖掘模块主要分为三个部分,文本挖掘、数据存储以及数据查询。文本挖掘部分才用并行计算框架Spark进行处理,能够高效地完成对海量数据的处理。文本存储部分采用非关系型数据库MongoDB和HDFS,MongoDB对接数据采集模块,HDFS对接文本挖掘模块,保证能够为系统提供最大化的存储性能。数据查询部分采用基于Lucene的搜索引擎Elasticsearch实现,保证能够为可视化模块提供精准、快速的查询。数据可视化模块采用Python语言下的Django框架进行web应用构建,热点信息的词云化处理采用pytagcloud包绘制,页面与后台的数据交换才用Ajax请求实现。模块的整体布局和效果实现基于HTML、CSS和JavaScript,能够清晰地将热点信息展现在web页面上,同时提供用户与服务器端的交互服务,满足需求的同时也具有很好的跨平台支持。4.2.3数据处理流程系统内的数据处理由数据采集程序、并行计算框架Spark、HDFS以及MongoDB一起完成。数据在系统内的处理流程大致如下:新浪微博网页新浪微博网页Scrapy爬虫程序MongoDB计算框架SparkHTML清洗后文本RDD挖掘结果TXTITEMHDFS图4.2.3系统数据处理流程数据最初以HTML形式进入数据采集模块,由Scarpy编写的爬虫程序进行解析和处理,随后存储进非关系型数据库MongoDB,将数据导出清洗后上传至HDFS。计算框架Spark从HDFS读取经清洗后的数据转换成Spark下特有数据结构RDD进行挖掘处理,最终以将挖掘结果以TXT文件形式进行输出。4.2.4用户界面设计系统的用户界面也就是数据的可视化页面。主要包含两个功能提供对Spark处理后的最终数据和原始数据中与热点相关数据的可视化。主界面主要分为两个模块,热点信息词云以及相关原始数据展示列表。WWeb文本挖掘系统热点词云原始微博列表图4.2.4系统界面概要图第5章系统实现本章将对系统设计的细节实现做详细的介绍,包括从系统各部分的环境部署搭建到详细设计和实现。此外最后对系统进行了测试运行,实现了针对新浪微博舆情数据的文本挖掘。5.1系统运行环境系统由分布式服务器集群作为承载硬件,因未大规模投入生产,在本地使用VMwareStation创建三台虚拟机模拟分布式服务器集群。集群由一个主机两从机构成,具体配置如下:表5.1-1系统硬件配置名称配置数量物理机16GRAM,CPUI7-4710MQ,1T硬盘1集群主机(master节点)2GRAM,CPU1核,30G硬盘1集群从机(slave节点)2GRAM,CPU1核,30G硬盘2表5.1-2系统运行环境环境名称具体版本集群服务器操作系统CentOS6.5JDK1.7Hadoop2.6.0Spark1.6.2Python2.75.2系统环境搭建5.2.1HDFS的搭建HDFS(TheHadoopDistributeFileSystem)是大数据处理框架Hadoop的一部分,因此安装HDFS即安装Hadoop框架。一般来说,Hadoop的安装需要经过以下步骤:①添加专用的hadoop用户账户,避免直接使用root账户可能带来的安全隐患。②解压JDK到/opt目录,修改/etc/profile文件设置path及classpath为JDK目录。③安装ssh-server,在集群各个服务器上生成公钥,并将该公钥复制到集群中的其他服务器上并添加到的授权文件中。集群中的三台服务器均要执行此步骤,实现集群中服务器间两两免密码登录。④解压hadoop安装包到/opt目录,修改hadoop目录下/etc/hadoop目录下的配置文件core-site.xml随后将slaves文件的内容更改为slave01,slave02。⑤将配置好的hadoop复制至从机slave01,slave02。⑥将集群中所有服务器的主机名与IP地址添加进每台服务器的hosts文件中。⑦执行命令hdfsnamenode–format格式化namenode,初始化hadoop。5.2.2Spark框架的安装①解压spark安装包到/opt目录。②将spark安装目录conf目录下spark-env.sh.template重命名为spark-env.sh,在该配置文件内添加以下JAVA_HOME、HADOOP_HOME,SCALA_HOME、HADOOP_CONF_DIR、SPARK_MASTER_HOST等关键配置项的配置。③在conf目录下slaves中添加从机的主机名,完善集群信息配置。④将配置完成的spark拷贝分发至各个从机节点,完成spark集群部署。5.3模块设计的具体实现系统的整体流程与系统内数据处理流程基本一致,可以用下图进行简要的表示:响应交互关键词抽取数据存取响应交互关键词抽取数据存取数据采集文本挖掘数据可视化开始解析微博网页数据清洗数据呈现图5.3系统整体流程第一部分:该部分主要完成原始文本数据的采集。将国内知名社交网站新浪微博作为数据来源,编写程序实现对微博网页的解析,将原始网页上的有价值信息转换成结构化数据,随后将其写入非关系型数据库。第二部分:该部分主要完成对获取到数据的处理工作。首先对数据进行分词处理,然后对文本中的各种符号以及停用词进行剔除,将“干净”的语料上传至分布式存储系统,同时也将原始数据导入搜索引擎以备可视化部分调用。再由Spark框架从分布式存储系统读取数据,根据选定算法进行关键词抽取并将结果进行保存。第三部分:该部分主要完成对最终处理结果的可视化工作。可视化系统从分布式存储系统中读取处理过后的最终数据,根据数据绘制可交互词云,可以根据用户请求进一步自定义展示内容。5.2.1数据采集模块数据采集模块的主要功能是从新浪微博获取微博消息文本。新浪微博对未登录用户访问内容进行了限制,在登录微博账户之前用户仅能查看少量数据。因此为了实现获取大量数据。首先应该利用程序模拟用户进行登录操作,获取登录成功的cookie,爬虫的请求带上该cookie便能够进行数据的爬取。本系统采用的登录策略为使用Selenium操作无界面浏览器PhantomJS模拟用户填写用户名以及密码,在账户较少时点击登录按钮后自动捕获带有验证码的网页,以供用户查看验证码自行识别输入进行登录操作。在大规模爬取前有大量账号需要登录时,可以使用打码平台对验证码进行识别,自动进行登录操作,批量获取cookie。爬取流程以初始队列开始,对用户的关注与粉丝列表进行迭代抓取。通过解析网页获取目标结构化数据,便于对文本进行后续的分析处理。本模块使用python语言下的Scrapy爬虫框架编程实现,详细的流程如下图所示:爬取队列更新存储爬取数据解析网页开始初始化爬取队列爬取队列更新存储爬取数据解析网页开始初始化爬取队列结束图5.2.1数据采集模块执行流程爬虫程序可以简要地分成三个部分,抓取目标数据的结构定义(Item),爬虫数据的存储方式(ItemPipline),以及具体执行网页解析抽取方法(Spider)。创建Scrapy项目后,第一时间的工作是要确定具体需要的数据字段,以此为依据定义程序的Item类,用来保存从网页上解析抽取出来的数据。本系统中爬虫程序中定义的微博数据Item类如下表所示:表5.2.1微博Item定义字段名称备注_id微博IDID用户IDContent微博内容PubTime发表时间Co_oridinates定位信息Tools使用工具Like点赞数Comment评论数Transfer转发数网页的爬取从初试的爬取队列开始,访问初始列表内用户的个人主页,利用利用Xpath对目标标签进行定位,获取其中内容并保存到对应Item。随后数据将进入到ItemPipline进行数据的存储。ItemPipline的主要工作是对从网页上抽取数据后的存储、验证。本系统中,在ItemPipline中未对数据进行进一步处理,将数据原样写入了非关系型数据库MongoDB。因考虑到爬虫程序需要高速爬取网页,对数据存储响应速度要求较高,所以没有将数据直接写入HDFS。5.2.2文本挖掘模块文本挖掘模块从功能上进行划分可以简单分成三个部分,即文本预处理,关键词提取以及为可视化数据的检索。在对抓取到的文本进行关键词抽取操作之前,必须对文本进行数据清洗,因为原始文本中包含大量的标点符号、特殊字符以及无实际意义的停用词。这些字符都将对后续处理造成影响。在本系统中数据清洗主要执行了以下几种操作:①文本分词中文分词指的是将一个汉字序列(句子)切分成一个一个单独的词。分词就是将连续的自序列按照一定的规范重新合成词序列的过程。中文文本字、句、段有明显分界符来进行简单划界。但是词与词之间并没有形式上的分界符,因此必须对获取到的文本进行分词后,才能对其进行进一步的处理。本系统内分词处理采用了流行的Python分词组件JieBa分词,JieBa分词的处理流程可以简单地概括为如下几个步骤:生成DAG加载生成DAG加载词典最大概率路径HMM模型图5.2.2-1JieBa分词处理流程词典由分析大量语料得到,是一个由数万词语构成的文本文件,是分词处理的基础。在具体使用时,可以根据自身需求对其进行删改。词典加载完成后基于Trie树结构实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图(DAG)

。随后采用动态规划查找最大概率路径,找出基于词频的最大切分组合。对于词典内没有覆盖的词语使用了Viterbi算法生成基于汉字成词能力的HMM模型。在具体使用时,对微博文本自带的话题标签进行特殊处理,将所有话题抽取出来加入JieBa分词的词典内,避免在分词时将话题进行分词处理,影响后续挖掘效果。②过滤标点符号及停用词由于采集到的原始文本集内包含大量的标点符号、英文字符以及类似“的”、“地”、“得”这类无意义的中文停用词,因此在进一步处理文本之前我们需要对其先进行处理。本系统中采用的方法是先预先准备中文停用词表,覆盖中文文本中常用的停用次以及各类标点、特殊符号。通过遍历文本与停用词表对特殊符号及停用次进行过滤,得到较为干净的文本。③利用Spark抽取关键词该部分为系统文本挖掘的关键处理模块,实现对处理后语料的进一步处理,利用TF-IDF算法对微博文本进行关键词抽取。把抓取到的大量微博当作一片完整的文章,那么此时抽取出来的关键词也能一定程度反映出当前舆情关注的热点。Spark对文本的处理流程可以用下图进行表示:权重排序开始权重排序开始HDFS计算TFIDFRDDRDDTXT图5.2.2-2spark处理文本首先Spark从HDFS读取文本数据,将读取出的数据转换为自身特有数据结构RDD,随后利用TD-IDF算法进行运算。此处以单条微博消息作为处理的基本单位,把抓取到的整个数据集作为算法中语料库的参数。对所有词语进行TF-IDF权值的计算,计算完成后对整个字符列表进行去重

温馨提示

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

评论

0/150

提交评论