摘 要 文章提出一种基于DOM的Web信息提取 方法,通过归纳 学习获得被提取信息的定位路径,利用XPath和XSLT在数据定位和数据转换方面的特点编写提取模式,根据网页元素与DOM节点对应关系,判断所获得信息源是否适用于已有提取模式。
关键词 Web信息提取;DOM;XPath;XSLT;基于DOM的网页结构判断
1
引言
Web信息的爆炸性增长,给我们带来了获取更多信息的机会,同时,也增加了在纷繁复杂的Web信息库中准确地获取信息的困难。例如,使用搜索引擎搜
索信息时,返回信息成千上万,其中包含大量无用甚至是错误的信息,进行人工挑选要耗费时间和精力。另外,由于网页的编写方式,编写风格各种各样,使得所搜集的信息也不适于结构化存储。本文提出了一种基于DOM
[1]的Web信息提取方法,利用DOM提取信息,并进行相关信息源的搜索,实现信息的精确定位。
2
基本思想
本文的基本思想是:将不够规范的HTML文档整理成格式良好的XHTML[2]文档,再将XHTML文档解析成一个树模型——DOM树,然后围绕DOM树进行信息的提取以及相似结构网页的搜索,提取的结果以XML文档表示,并进行结构化存储。如图1所示:
图1 设计思想
以下是对各个处理步骤的 分析说明:
2.1
整理
HTML用一对预定义的标记来描述包含在其间文本的表现方式,要求标记成对出现。事实上,有许多HTML文档中的标记不符合HTML语法要求,比如缺乏结束标记等。这些错误 影响对 HTML文档的正确解析,因此,为便于解析,首先要对HTML文档进行整理,将其转换成XHTML文档,XHTML严格建立在XML基础之上,并且明确定 义了格式良好的文档规则。这样就可以像对待一般XML文档一样对待XHTML文档,可以利用各种XML标准技术来操纵XHTML文档。
对HTML文档的整理主要是以下三个方面:
(1)为不成对的标记加上结束符“/”,例如
加上结束符为
;
加上结束符为
;
(3)将URL中所有的“"”换成“/”。
2.2
解析
解析,就是将经过转换得到的XHTML文档构造成DOM树,将文档中的元素映射成DOM树中的节点。
DOM全称是文档对象模型(Document Object Model, DOM),它根据文档中标记之间的嵌套关系,将文档表示为一个树形结构,文档中的元素、属性、以分析的字符数据、注释以及处理指令等都是节点。 Document是文档根,是操作整个DOM树的句柄。
DOM树是面向对象的文档模型,树中的节点都是接口,它们派生于Node接口,每个节点都有各自的特性和操作,处理节点比较方便。
当解析生成DOM树之后,对HTML文档中信息的提取,就转换成为对DOM树中相应节点的查找,节点位置由定位规则指出,提取模式中的模板按照定位规则的指示提取出相应位置的信息。
解析的处理过程如下,首先找出网页中所有的开始标记,将其名称存入标记表。接着逐次找出网页中每个标记,并检查其是不是一个有开始 标记与其对应的结束标记或者是注释标记,如果是没有对应开始标记的结束标记或者是注释标记,就删除该标记;否则,如果是有对应开始标记的结束标记,就将这 个结束标记与其开始标记之间的 内容存储到标记表中,这个内容就是叶节点,重复操作,直到网页中每个标记都处理完之后,就建立了一个由标记及其所包含内容构成的表,整棵树被分解成n棵子树存入表中。然后,将标记设置为根节点,将表中n棵子树顺次添加到根节点下,形成一棵n叉树。
2.3
信息提取
提取信息分两步,现生成提取模式,然后利用提取模式提取信息。
2.3.1
提取模式生成
生成提取模式分三个步骤,归纳单个样本网页信息块定位路径,归纳样本网页集合信息块定位路径,定位信息块内信息点路径。
(1) 归纳单个样本网页信息块定位路径
根据用户提供的样本网页的结构特点,将样本网页按相似结构分块,本文所感兴趣的信息就位于这些相似结构的信息块中,这也是本文学习提取算法的一个限制条件,即,被提取信息点位于结构相似的信息块内,各信息点之间没有其他信息。
单个样本学习算法如下:
IBPATHi=NULL;
先序遍历解析树DOMi;
得到的路径表达式记入treePath;
依次扫描treePath;
while(treePath未结束){
比较两条路径中的相应路径结点;
if(两路径结点的索引值和孩子结点的索引值相同){
将该路径写入IBPATHi;
比较下一组路径表达式;
}
else(结点的索引值相同,而孩子结点的索引值不同){
截取该路径表达式中该节点及该节点之前的路径,将该路径写入IBPATHi;
进入下一组路径比较;
}
}
return IBPATHi;
(2) 归纳样本网页集合信息块定位路径
算法描述如下:
LocationIBs=null;
for(i=1;i<=m;i++){
Path[i]=null;
LocationIB[i]=null;
}
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){
扫描第j个样本页面的DOM树;
把第j个样本页面中的第i项内容的路径表达式写入path[i]中,即path[i]=path[i]+{path[i][j]};
}
for(i=1;i<=m;i++){
while(path[i]!=null){
随机提取一条path[i][j]令其等于apath;
apath与path[i]中其它路径表达式与其它进行比较,获得被apath覆盖的正例集合S;
path[i]=path[i]-S;//删除被覆盖的正例
LocationIB [i]= LocationIB [i]+apath;
}
}
LocationIBs={ LocationIB [1], LocationIB [2],……, LocationIB [m]};
return LocationIBs;
}
(3) 信息块内信息点定位
确定了样本集合中信息块的定位路径之后,可以通过在信息块内先序遍历得到具体信息点的定位路径,这个定位路径用XPath
[3]表示。
2.3.2
提取信息
利用归纳 学习得到的XPath,编写XSLT
[4]文档,就可以根据该文档转换DOM中的节点,生成一个XML文档,这个XML文档中只保留XPath指定的节点,从而完成信息提取。
2.4
相似网页搜索
生成的提取模式可以重用于结构相似的网页,因此,需要判断所搜集的网页是否适用于已有提取模式。本文提出利用DOM判断所搜集网页是否与样本结构相似,进而确定是否可利用已有模式提取所搜集网页中的信息。
2.4.1
判断相似网页
从一个网页到DOM的转换来看,网页中的元素都是以嵌套关系转换成为DOM树中的节点,每个元素在DOM树中都有固定位置的节点对应,可以将这个转换过程抽象成一个函数:
设网页标记E和DOM树节点N是两个集合,一个从E到N的函数f记为:E—>N,是一个满足以下条件的关系:
对每一个e
E,都存在唯一的n
N,使
f,记作f(e)=n,E是函数f的前域,N是函数f的陪域。在表达式f(e)=n中,e是函数的自变元,n是对应于自变元e的函数值。
从函数的定义可以看出,如果f(e)=n
1,f(e)=n
2,那么n
1=n
2。也就是说,一个自变元在一个特定函数下,有唯一的函数值与之对应。利用这种关系可以推断出一个网页标记集合按照嵌套关系只能影射为一个DOM树,这样,判断两个网页结构是否相似可以转换为判断两个网页解析得到的DOM树是否相似。
算法描述如下:
先序遍历测试网页的节点列表NodeList1;
获得NodeList1的长度Length1;
先序遍历样本网页的节点列表NodeList2;
获得NodeList2的长度Length2;
if(Length1=Length2){
for(i=1;i<=Length1;i++){
取得NodeList1的第i个节点Node1i;
取得Node1i的节点名NodeName1i;
取得NodeList2的第i个节点Node2i;
取得Node2i的节点名NodeName2i;
if(NodeName1i不同于NodeName2i){
return false;
break;
}
}
retuen true;
}
else{
return false;
}
2.4.2
搜集相似网页
本文设计了结合判断网页结构的爬虫算法,来完成相关信息源的搜集。
算法描述如下:
/*****初始化****/
设定搜索深度Depath;
设定当前搜索深度currentDepath;
从初始URL取回种子网页;
从种子网页中取出所有URL,存入URL列表urlList;
取得样本网页DOM树的结点列表nodeList1;
/*****搜索网页*****/
for(currentDepath<=Depath;currentDepath++){
if(urlList!=NULL){
以先进先出 方法从URL列表中取出一个URL;
从该URL取回测试网页存入网页库;
解析该网页生成测试DOM树;
获得该DOM树的节点列表nodeList2;
if(nodeList1 与nodeList2相同){
从该测试网页取出所有URL存入urlList;
}
else{
从该测试网页取出所有URL存入urlList;
将该测试网页URL从URL列表清除;
将测试网页从网页库中删除;
}
}
2.5
格式输出
提取结果最终要结构化存储,本文采用XML作为提取结果,它具有以下两个便于进行结构化存储的特点:
(1) XML数据容易被其他 应用程序访问和使用,方便与其它系统整合。
XML数据结构性强,可以直接被其它应用程序访问,或者通过XML的查询语言来访问也比较方便。这样,信息提取系统可以方便地为信息集成、信息过滤等其它需要信息提取结果的系统服务。
(2) 提取结果可以容易地表示和转换为不同格式,满足不同用户的需要。
通过使用不同的XSLT文件,同一 内容的提取结果可以用不同风格展示,应用在不同的场合,使数据能够更合理地、有针对性地表现出来。这在推动信息数据表现个人化、风格化的同时,也提高了数据的可重用性。另外通过使用XSLT处理器和XSL样式表,可以容易地将XML的提取结果转换为另一种格式,满足不同需要。
3
方法评价与结论
信息提取技术主要采用以下三个评价指标,即查全率(Recall)和查准率(Precision) 以及F值。查全率是测量被正确提取的信息的比例,而查准率用来测量提取出的信息中有多少是正确的。 计算公式如下(P是查准率,R是查全率):
两者取值在0和1之间,数值越接近1,查全率或查准率就越高。
下面是查全率和查准率的加权几何平均值,F值评价方法:
其中b 是一个预设值,是P和R的相对权重,b大于1时表示 P更重要,b小于1时表示R更重要。通常设定为1,表示二者同等重要。这样用F一个数值就可看出系统的好坏,F值也是越接近1越好。
本文对 http://www.oreilly.com/网站的10张网页样本和www.amazon.com网站的13张网页样本进行测试,测试结果如表1所示:
表1 系统测试效果表
网站地址
|
样本网页数目
|
查全率%
|
查准率%
|
F值%
|
www.amazon.com
|
13
|
96.1
|
91.1
|
93.5
|
www.oreilly.com
|
10
|
93.7
|
88.7
|
91.1
|
从表1.1看出,对于结构比较规范的网站,该方法不用太多的学习样本,就能获得比较高的查全率和查准率。