当今我们正处于一个信息高度膨胀的时代,网络上各类信息鱼龙混杂,想要从中寻找有效的信息是相当困难的,而人们也更加趋于通过网络来了解当前的热门话题或热门词汇。在这种环境的驱使下,从众多复杂的信息中提取热门信息从而发现热门趋势的技术势在必行。交通运输物流作为人们生活中最为重要的一部分,备受人们的关注,为了能让用户及时了解交通运输物流领域中舆论和资讯的热门信息资源,热点词的统计变得必不可少。了解到交通运输物流领域的热点词,可以方便用户更加高效地进行检索,从而确定当前的流行趋势,同时,热点词的统计也可方便管理者对交通运输物流领域出现频率较高的词语有准确认识,有利于向用户提供更实时的信息。
词频统计是对文章中每个词的出现频率进行统计,即已知某个关键词后,在目标文章中统计该词出现的频率。目前,很多学者都是基于词频统计对相关领域的相关问题进行研究,一些学者也单独对模式匹配下的词频统计进行过研究,伴随大数据概念的产生,在大数据环境下的词频统计需要对海量数据进行文本分析和统计分析,在并行计算框架机制下可以更加快速地进行词频统计,也可以增加目标数据的量,从而提高热点词的准确率。大数据环境下热点词词频统计的步骤如下所示。
1.数据爬取
本书采用的是大数据软件基础架构中的Nutch进行Web数据爬取,Nutch是一个开源Java实现的搜索引擎,包含Web爬虫和全文搜索两部分,主要是从网络上抓取网页信息并为这些信息建立索引。Crawl中有三个重要的数据文件,分别是crawlDB、segments和index。crawlDB用于存放URL和URL之间的关系,是爬行与重新爬行的重要依据;segments用来存放抓回来的网页,页面内容有raw content和parsed text两种形式,Nutch以广度优先的原则在网络上爬行,因此每爬完一轮会生成一个segment;index用于存放所有index合并后的完整索引,同时索引文件只对页面内容进行索引,没有进行存储,因此查询时要去访问segments目录才能获得页面内容。Nutch爬取数据的框架图如图5.1所示,具体流程如下:
图5.1 Nutch爬虫框架图
(1)创建新的爬虫数据库crawlDB。
(2)建立初始URL集start URLs。
(3)将start URLs注入crawlDB中,即inject操作。
(4)建立抓取任务列表。对注入的URLs进行分析,确定抓取任务的详细信息,然后建立fetch list,以后的抓取工作就可以根据预处理的此列表进行工作了。
(5)通过www(万维网)实现抓取工作,并将根据fetch list将抓取到的页面文件放在fetched content中,以便后续流程的处理。
(6)通过内容解析器content parser对抓取到的页面文件进行分析和处理,得到文本内容以及其他可能需要的数据parsed text & data。
(7)根据网页分析处理获取到的信息,更新crawlDB,并根据提取到的抓取任务已经注入的URLs循环执行抓取任务。
(8)重复执行第(4)步到第(7)步,直到达到预先设定的抓取深度。
(9)对预处理的文件进行分析、过滤、分词等,建立索引。
最终,将得到的爬取结果以json形式存储起来。
2.文本分词
由于中文与英文书写格式的区别,中文环境下的文本内容需要借助于中文分词器提取词语,本书采用的中文分词工具为IKAnalyzer,它是一个开源的基于Java语言开发的轻量级的中文分词工具包。以开源项目Lucene为应用主体,结合词典分词和文法分析算法的中文分词组件,独立于Lucene项目,同时提供了对Lucene的默认优化处理。该分词算法采用“正向迭代最细粒度切分算法”,支持细粒度和最大词长两种分词方式,速度最大支持80万字/秒(1600KB/秒)。并且支持多子处理器分析模式,包括中文、数字、字母,并兼容日文、韩文。同时,占用的内存较小,词库占有空间得到优化,用户还可自定义扩展词库。其结构图如图5.2所示。
图5.2 IKAnalyzer分词算法结构图
3.MapReduce下的词频统计方法
本书的词频统计主要是基于MapReduce运行机制进行计算,其中主要的部分即Map和Reduce两大部分。算法结构图如图5.3所示。具体的流程如下:
首先,上传输入文件。将待操作的文件上传至HDFS,然后采用IKAnalyzer分词法对已知文本进行分词处理,初步得到分词结果。
第二,计算分片split。在进行Map计算之前,MapReduce会根据输入文件计算输入分片(input split),每个输入分片(input split)针对一个Map任务。
第三,执行Map操作。对每一个输入分片计算其中包含的词语出现的次数,形成每一个分片的词语统计。
第四,执行Shuffling操作。对每一个输入分片的Mapping结果进行词语比对,将所有分片中出现的相同词汇汇总后,形成每个词语为一组的结果。(www.daowen.com)
图5.3 MapReduce下的词频统计算法结构图
第五,执行Reduce操作。对每个词语所构成的组进行统计,得到每一个词出现的频率,形成初步的词频统计结果。
最后,得到词频统计最终结果。将初步的词频统计结果进行汇总,把所有的词语以及出现的频率汇总到一起,形成最终的词频统计结果。
为了能更直观地看出目标文本中出现频率较高的词汇,在词频统计结束之后,依然使用MapReduce机制对得到的统计文档进行词频从高到低的排序,最终得到结果。
4.热点词可视化显示
为更加直观地看到热点词及其词频,采用ECchars的字符云和饼图对热点词及词频进行可视化显示。
5.实验及结果分析
实验运行环境为CPU 2.5GHz,内存4GB,使用JDK1.6编程。热点词词频统计实验的结构图如图5.4所示。
图5.4 热点词词频统计的结构图
首先通过Nutch技术从网络上爬取到实验数据,将这些数据经过适当预处理之后保存为info.json文件,文件结构如表5.1所示。
表5.1 爬取到的数据文件结构
续表
其次采用IKAnalyzer分词法,对目标文件进行分词处理,再基于MapReduce机制进行词频统计,同时,对得到的词频统计结果进行排序后得到词频统计的最终结果hotword.txt文件,文件结构如表5.2所示。
表5.2 词频统计前10位
第三,读取hotword.txt文件,将得到的词频统计结果存储在HBase的数据库表中,表名为infoHotWord。该表用于存放所有文章的分词结果以及该词的词频。infoHotWord表结构如表5.3所示。
表5.3 infoHotWord表结构
最后,通过读取相应的数据库表,将词频统计结果以字符云、饼图和表格的形式显示在页面上,供用户查看。可视化结果如图5.5所示。
图5.5 热点词词频统计可视化结果
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。