提取网页主题相关内容
一般在浏览Web上的网页时会发现两部分内容:一部分是网页的主题信息,另一部分则是与主题内容无关的导航条、广告信息、版权信息等内容,我们称之为“噪音”内容。通过提取主题信息可以减少一半浏览时间,提高用户获取信息的速度,从而增强Web的可用性。那么如何准确、有效的获取Web网页的主题信息呢?下面给出了一种解决方案。
一、 解析html
HTMLParser是一个对现有的HTML进行分析的快速实时的解析器,首先从( HTMLParser.sourceforge/)下载htmlparser1_620050925. zip解压缩得htmlparser.jar,将htmlparser.jar添加到classpath中,并在程序中引入相应的HTMLParser包。类Parser是HTMLParser的入口,将HTML文本信息传给它,或者直接传递一个URL地址,如:Parser parser = new Parser(“www.yahoo”);初始化一个Parser实例parser后,紧接着就是对所传入的HTML内容进行解析,方法actAllNodesThatAre (XXXTag.class)将HTML内容中存在的所有的标签XXXTag给解析出来放到一个列表list中去,几乎HTML的标签都有一个对应的类,比如LinkTag、ImageTag、FormTag、网页html下载TableTag等等,这些标签类都在org.
htmlparser.tags包中。根据要处理不同的标签传入不同的类,这种做法可以很方便地处理其他类型的标签。返回的列表中每个元素都是传入类的一个实例,通过这个实例可以访问到当前这个标签的起始位置、结束标签的位置以及包含在标签中的文本信息,同时也可以访问其父标签以及所有的子标签等等,同时可以通过toHtml方法来对标签中包含的HTML信息进行清洗,HTMLParser会自动把一些没有关闭的标签加上,这样所生成的字符串中就包含着完整的格式控制信息,在页面上显示这样的信息也不会破坏版面布局,达到了预期的效果。
例如:有如下不规范的html文件(有未关闭标签)
通过节点的toHtml()方法补全标签
补全了没有关闭的标签
本系统采用先读取html文件并将其转换为字符串htmlString:
String htmlString = readHtmlFile(file);
然后将其作为Parser对象的构造参数:
Parser parser = ateParser(htmlString,”gb2312”);
然后结合过滤器过滤出需要的标签节点。
二、 过滤器
一般主题信息包含在下列标签中:<table>、<tr>、<td>、<p>、<div>等。所以如何过滤出这些节点标签呢?htmlparser提供了很好的支持:
NodeFilter[] filters = new NodeFilters[3];
filters[0] = new NodeClassFilter(TableTag.class);
filters[1] = new NodeClassFilter(ParagraphTag.class);
filters[2] = new NodeClassFilter(Div.class);
NodeFilter filter = new OrFilter(filters);
NodeList list = actAllNodesThatMatch(filter);
OrFilter是结合几种过滤条件的‘或’过滤器。通过以上代码就可以过滤得到所有的<table>、<p>和<div>节点。
例如:下面html文件经过以上过滤器过滤后就只得到所需的节点了
Html文件经过滤器过滤
经过滤器过滤后得到的结果
三、 信息抽取、
1、<p>、<div>节点的内容相关性判定:
我们称包含文本信息的区域为内容块,本系统的核心是内容块的主题相关性判断。本系统
所涉及的内容块节点为<table>、<div>、<p>。主题相关性判定(当然本系统认为<div>标签中如果还含其他标签,或者<P>标签中含有<div>,<script>或内嵌<p>标签,则认为主题不相关。)包含两部分:局部相关性判定(由局部相关度表示)和上下文相关性判定。局部相关度(LocalRel)由内容块节点中的非链接中文字符总数和链接总数决定,其计算公式为:
LocalRel = wordsNum / linkNum
当LocalRel 大于等于L(其中L是局部相关度的阀值),称该块局部相关(如果linkNum为0且wordsNum大于14,认为局部相关)。上下文相关性即判定该内容块节点的前驱兄弟和后继兄弟的主题相关性。前驱兄弟和后继兄弟必须是包含有中文内容的结点。主题内容块的判定算法如图:
words_min是规定内容块节点的非链接中文字符总数的最小值。一般情况下,若wordsNum<words_min,则称该节点为空或没有内容,没有内容的块节点是主题不相关的。当然,若LocalRel >= L时,且wordsNum >= words_min时,此时并不能说明该块就是主题相关的。它只能说明该块是局部相关的。原因基于如下观察:
a、 一些局部相关度大的块,例如一些与主题无关的广告内容,它们可能没有链接或包含较少的链接,因此它们可能LocalRel >= L,且wordsNum >= words_min。
b、 即使wordsNum <= words_min,也不能判断它是主题无关的。因为一些小信息量的主题内容,如正文的标题或正文中的小信息
因此还要通过它前后的兄弟节点的主题相关性来判定是否主题相关。本系统对<table>节点是单独处理的,因此<p>节点和<div>节点用于以上信息抽取算法中。
2、<table>的有效性判定
HTML页面中表格是由<table>元素标识的。在很多Web站点尤其是商业站点,用<table>元素标识的除了称之为其表格的数据表格之外还包含导航栏,或其它站点的链接等其他用来
进行页面布局的非数据表格,非数据表格又被称为假表格。另一种情况是并不是所有的Web页面中的数据表格都是感兴趣的,有时即便是一个领域相关的Web页面也可能包含几个内容跟研究无关的数据表格。已经知道要定位的表格信息存在于<table></table>结点之间的内容中,所以只关心table结点。通过对html文档中table结点的依次遍历滤除非数据表格。在该过程中使用的启发式规则如下:
规则1:表格大小至少是3行3列。
规则2:如果表格中包含大量的链接,则认为该表格是非数据表格。
规则3:如果表格中包含<script>、<select>、css样式标签等,则认为该表格是非数据表格。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论