通用论坛正文提取算法设计

版权声明:本文为博主原创文章,欢迎各位转载,但须注明出处 https://blog.csdn.net/qq_34202873/article/details/78452449

通用论坛正文提取算法设计

Abstract: In today’s era of large data, with the rapid development of the Internet and mobile Internet, network text and user comments have become increasingly prominent, so the forum data mining technology came into being. With web crawler technology, we can quickly get massive user reviews from various types of forums, analyze and mine these data, and extract valuable information from them. However, most of the web data is presented in a semi-structured data format, and the information we need is often submerged on the page in a number of “noise” elements such as advertisements, icons, links, and so on. In this paper, we focus on the comments of various BBS types of forum pages, and use the clustering tree model and text density model to carry out the main posting and author, time and comment extraction. In this paper, the extracted web page source code is complemented and then filtered through regular expressions, and then the tree model is combined with the text density model to analyze and extract the web page source code. Finally, the pruning algorithm is used to match the floor with the highest similarity
Key words: regular expression, Dom tree clustering analysis, pruning algorithm, HTML

摘 要: 在当今的大数据时代里,伴随着互联网和移动互联网的高速发展,网络文本及用户评论提取日益凸显,因此论坛数据挖掘技术应运而生。借助网络爬虫技术,我们能够快速从各种类型的论坛中获取海量的用户评论数据,对这些数据进行分析和挖掘,从中提取出有价值的信息。但是,大部分网页数据是以半结构化的数据格式呈现的,我们需要的信息在页面上往往淹没在大量的广告、图标、链接等“噪音”元素中。本文针对各种BBS类型的论坛网页的评论,利用聚类 树模型以及文本密度模型,进行主贴以及作者、时间、评论的提取。本文对提取到的网页源码进行修复补全,然后再通过正则表达式过滤图片等 标签,再利用 树模型结合文本密度模型对网页源码进行分析提取。最后通过剪枝算法匹配主题相似度最高的楼层。
关键词: 正则表达式,Dom树聚类分析,剪枝算法,HTML

问题解决

由于文本在网页上相对分散,提取的字段更多,传统的算法不再适用,需要重新设计通用提取算法根据题目所给的信息,如图1,本文通过以下几种方法设计出一个基于文本密度的信息提取算法以解决该问题。

1 数据的提取

本文用C#通过vs2013软件,利用以下命令提取出HTML标签里面我们所关心的数据

标题:<h1 class="atl-title"> 
题主:<div class="atl-info"> 
发帖内容:<div class="bbs-content clearfix"> 
回帖信息:<div class="atl-reply">

2 基于文本密度的信息提取算法的设计

本文结合网页分块方法的优点与Dom树结构的优点,并在此基础上设计了新的算法,粗略操作见下图。

3 基于文本密度的信息提取算法的实现过程

本文设计的算法具体实现步骤分为以下三步:
1) 网页爬取、正文提取
用C#写的爬虫将爬取的整个网页的信息保存在一个文档之中,其中网页的文字信息都被包含在众多的HTML标签之中,先通过预先设置好的阈值,用统计方法把信息量最大的某些行找出来。
2) 建立Dom树、初次提取
因为评论的长度有长也有短,作者的姓名也有长短,不能单单靠内容的多少提取完整的信息,我们建立Dom树结构,把不同层次的标签找出来,结合剪枝找出楼层相似度找到底部节点作者、评论、时间、回复并通过正则表达式将其提取出来。与之前用统计方法找出来的信息匹配,检查是否有差错、是否有遗漏。
3) 再次筛选、确认结果
选取步骤一中得到的而在步骤二中底部标签也有出现的信息作为评论,根据步骤一的评论回复,找出Dom树中该网页的评论回复所在的节点,然后遍历所有同等级的节点,补全步骤一中遗漏的信息

3.1 正文的类型

论坛页面的URL可分为两种类型 :包含主贴的论坛页面URL、不包含主贴的论坛页面URL。包含主贴的论坛页面通常通过成段的文字描述一个或多个主题。 虽然包含主贴的论坛网页也会出现图片和超链接 ,但这些图片和超链接并不是网页的主体。

3.2 包含主贴的正文的特征

在包含主贴论坛的页面中,如图3 ,正文主题信息是成堆出现的 ,从视觉上看是处在一个内容块中 ,称为网页正文主题内容块。
对于正文部分,不同的论坛网站(如非主帖论坛,见图4),主贴正文所在的位置不同,并且HTML标签的结构也不同,对于爬虫而言,抓取的论坛页面是各种各样的,不可能针对所有的页面去写抓取规则来提取主贴正文内容,因此需要一种通用的算法将主贴正文提取出来。

3.3 网页正文提取算法的具体操作

当前,现有的网页正文提取算法有以下几种:
- 基于标签用途的正文提取算法
- 基于标签密度判定
- 基于数据挖掘思想的网页正文抽取方法

- 基于视觉网页块分析技术的正文抽取

经过实践,前两种方法还是比较容易实现的;而后两种方法在实现上较为复杂,从算法效率上来说也不是很高。在先前本文已经把标签密度的提取算法实现了,但实际操作时错误率较高。而在实际应用中,人们需要的是一种简单易实现的,既能保证处理速度,提取的准确率也不错的算法。于是本文结合前两种算法,研究出网页HTML页面结构,获取了一种比较好的处理思路,即基于文本密度的信息提取算法。
用C#写的上位机增加了文本密度分析功能,如图:


3.4 文本行块算法解析

从上图可看出对以上三个包含主贴的论坛网页进行文本密度分析,主贴文本集中在前面并且与周围的文本形成鲜明对比。
接着又对了一系列的各种类型的包含主贴的网站进行文本密度分析,如果能够从过滤HTML标签后的文本中找到正文文本的起止行号,行号之间的文本就是网页正文部分。
从分析结果看,包含主帖的论坛网页都有这么一个特性:正文部分的文本密度要高出非正文部分很多。本文按照这个特性就可以很容易将算法实现,那就是基于阈值去分析正文所在的位置。
阈值的确定可以通过统计分析得出一个比较好的值,而在实际处理过程中,不难发现这个值取180是比较合适的,也就是分析文本的时候,如果所分析的文本超过了180,那么就可以认为到达了正文部分。
但是仅靠一行一行的分析效果并不好,所以本文增加了一个深度提取结合阈值进行分析改进算法,深度初设为6,使得论坛主贴正文提取的正确率达到了90%以上。

3.5 算法的实现

首先将HTML去净标签,只留下正文,同时留下标签去除后的所有空白位置信息,所留下的正文称之为 。
定义一:行块
以xtext中的行号为x轴,取其周围k行(上下文均可,k<5 ,这里取k=3,方向向下,k称为行块厚度),合起来称为一个行块xblock,行块i是以xtext中行号i为轴的行块;
定义二:行块长度
一个xblock,去掉其中的所有空白符(\n,\r,\t等)后的字符总数称为该行块的长度
定义三:行块分布函数
以xtext每行为轴,共有LinesNum(xtext)-K个xblock,做出以[1,LinesNum(xtext-K)]为横轴,以其各自的行块长度为纵轴的分布函数。
为了是使得通用论坛爬取程序的鲁棒性更好,这里使用DOM树结构,然后用聚类算法找到楼层进行评论验证和信息完善(包括一些提取漏的作者、时间等信息)

3.6 Dom树聚类算法分析

每一个楼层的板块的标签结构是一样的,因此我们
采用基于标签相似度的楼层查找法,结合Dom树,
精确查找每一楼层的板块,如图:

这里为了更好的对XML文档树中的数据块进行相似度比较,使用聚类算法来提取数据块相似的标签。为了更好地描述公式,使用了A和B两个数据块,如图9和图10所示,首先统计所有标签之中,相似度最高标签区域,接着在这些区域标签之中,标签结构之中含有相似度元素最多的同等级的标签,便是楼层块的最顶级父类标签DIV。

数据块A的标签结构:
{div->div,level->1;div->table,level->2;table->tbody,level->3;tbody->div, level->4;div->div,level->5}
数据块B的标签结构:
{div->div,level->1;div->table,level->2;table->tbody,level->3;tbody->div, level->4;div->div,level->5}
通过比较数据块A与数据块B的标签结构,可以得知数据块A与B是表示楼层的块。建立算法如下:
选择Dom树中树枝level最长的一条作为类中心 ;
对于每个样本,将其标记为距离类别中心最近的类别;

将每个类别中心更新为隶属该类别的所有样本的均值;

收敛条件为;

找出聚类后所有簇类之中,含有容量最大的即为 楼层所在的簇类level;

实现流程如下图

3.7 信息二次筛选及验证

提取信息验证:把前面的密度文本密度算法提取出来的评论、作者、时间等代入到聚类后的楼层标签之中进行匹配,如果该评论、作者、时间都是属于该楼层之内的,则之前的提取没有出错,否则,滤掉这些噪声点。
提取信息检漏:根据前面提取的评论、作者、时间、回复,在Dom树中匹配出这些信息所在的层树枝上,然后遍历所有同层的树枝结构,找出评论,作者,时间和回复。最后补全密度算法提取遗漏的信息。

4 结果分析

利用已设计的爬虫经过上述步骤处理,得出以下结果并保存为Json格式的.txt文本,如图13和图14,以及正文匹配率统计表,如表1。可以看到,结合这几种算法之后,论坛信息的爬取达到90%以上,而且通用性极高。两种算法相辅相成,又互相弥补了不足。大大提高了提取信息的准确度。

参考文献:

[1]杨文超,乔鸿. 基于DOM树的可适应性多信息块Web信息提取[D]. 华中科技大学,2014.
[2]陈鑫. 基于行块分布函数的通用网页正文抽取[D].哈尔滨工业大学,2013.
[3]杨柱. 基于DIV标签树的网页主题信息抽取方法[D].长沙理工大学,2010.
[4]邓垦,胡勇. 基于DOM树的通用论坛提取技术[D] . 武汉大学,2012
[5]肖建鹏,张来顺,任星,宋晓光. 基于后缀树的Web论坛信息抽取[D],华南理工大学,2014

猜你喜欢

转载自blog.csdn.net/qq_34202873/article/details/78452449
今日推荐