3.3.2 方法步骤及核心算法
经过对前期相关研究成果的总结及对大量具有循环结构网页的观察和分析,我们可以发现论坛网页中存在着明显的循环重复结构,例如下面是一个完整网页中的部分核心代码,已去除其外围大量的无关内容(实际过程中,已删减的内容同样会对内容抽取构成严重干扰),并已将部分重要待提取内容和结构性标签以加粗黑体字体显示,为了代码的合规化,笔者保留了框架式的一些配对标签并对不配对的标签做了补缺,对不影响读者理解的内容则以HTML标签注释的方式进行了删减,并顺带做了额外交代。



从以上示例代码,我们可以简单观察或总结如下一些现象。
(1)论坛中的内容网页虽然纷繁复杂,但是其中存在一些宏观的重复性结构。
(2)div等标签的属性中,存在一定的语义表达,同时也存在一定的重复。例如可以利用相同的class属性值,较为快速的发现候选内容。
(3)噪声内容(凡是非待提取内容都可以归为噪声内容)与待提取内容混杂,且噪声内容中同样具备大量的重复结构。
上面这些现象为我们提供了分析并提取论坛网页中相关内容的一种可能,但并不意味着这很容易完成,因为这其中存在着各种复杂情形,略举几例如下。
(1)虽然重复性的结构往往对应着重复性的内容,但并非一定如此,层次相同的结构中,也可能包含与目标内容毫不相干的内容。另外,包含于其中的内容也具有多样性的特点,如文本、时间、图像等。
(2)无论是标签属性值的语义表达能力,还是标签属性的重复现象,都不是所有论坛网站都具备的。例如有些论坛页面中的标签属性值具有很大的随意性,完全不具备语义表达能力。
(3)某些论坛允许引用之后的回复,当这种“楼层”很多时,势必造成重复结构在多个层次都成为良好的候选组别。这时候如何优选也是一个棘手的问题。
(4)当回复“楼层”少,甚至没有回复时,此时真实的待提取内容却并不呈现出重复特征。相反,其他噪声内容却可能呈现出更好的重复特征,此时如何正确实现提取也是一大棘手问题。
(5)网页中的嵌套层次深,且在很多嵌套深度,都存在大量的重复性结构,然而真正需要的只有一个,如何从大量的循环结构中识别出正确的内容就成为一个难题。
(6)上面标记已经略去的代码,并非都只是小段代码,有很多是长篇幅的;并且其中还存在着一些配对错误的问题,这都对内容提取造成了困扰。
结合目前相关领域的研究成果,笔者总结了如下特征指标,分别简介如下。
(1)链接文字比。即给定区域中链接数和文本长度比值。
(2)代码文字比。即给定区域中代码长度和文字长度的比值。
(3)标签路径深度。即从标签树根节点到指定节点所经历的标签节点数。
(4)累积文本长度。即具有相同标签路径组别内的累积文本长度。
(5)标点符号数。即具有相同标签路径组别内的标点符号总数。
综合利用上述五个条件,可以较好地实现对论坛网页文本的正确抽取。基于如上指标,我们提出了论坛网页文本提取方法,该算法核心如下。
算法:正文提取
