发明内容
有鉴于此,本申请提供了一种网页正文的识别方法、装置及相关设备,以实现网页正文的识别。
为实现上述目的,本申请第一方面提供了一种网页正文的识别方法,包括:
基于待识别网页的源文件的文档结构,构建文档对象模型DOM树,所述DOM树的节点与所述文档结构中的标签一一对应;
基于所述DOM树的每一节点所对应的标签以及所述节点的属性值,对所述DOM树进行裁剪,得到目标DOM树;
基于所述目标DOM树的叶子节点所包含的文本的停用词的数量,计算得到所述目标DOM树中每一叶子节点的得分;
基于所述目标DOM树中的非叶子节点所包含的文本的停用词的数量,以及所述非叶子节点的各子节点的得分,计算得到所述目标DOM树中每一非叶子节点的得分;
将得分最高且距离所述目标DOM的根节点最远的节点确定为目标节点,并将所述目标节点所嵌套包含的文本确定为网页正文。
优选地,所述基于节点所对应的标签以及节点的属性值,对所述DOM树进行裁剪的过程,包括:
遍历所述DOM树,对于所遍历到的当前节点:
判断当前节点所对应的标签是否属于预设的过滤标签,所述过滤标签用于表示在网页后台执行的代码;
若是,将当前节点的分支从所述DOM树中移除;
若否,判断当前节点所对应的当前标签是否属于预设的高层标签,所述高层标签用于表示DOM树中含有丰富信息的标签;
若当前标签不属于预设的高层标签,判断当前标签的属性值是否包含预设的过滤字符串,所述过滤字符串用于表示不感兴趣的文本;
若当前标签的属性值包含预设的过滤字符串,将当前节点的分支从所述DOM树中移除。
优选地,所述过滤标签包括style、script、aaplet和textarea;所述高层标签包括html和body;所述过滤字符串包括comment。
优选地,所述目标DOM树中的叶子节点所包含的文本的停用词的数量的获取过程,包括:
针对所述目标DOM树中每一叶子节点:
利用动态规划算法对所述叶子节点所包含的文本进行分词,得到多个词;
基于预设的停用词库,统计所述多个词所包含的停用词的数量,并将所述数量确定为所述叶子节点所包含的文本的停用词的数量。
优选地,所述停用词库包括至少一个语种的停用词,所述基于预设的停用词库,统计所述多个词所包含的停用词的数量的过程,包括:
基于所述停用词库中各语种的停用词,统计所述多个词所包含的停用词的数量。
优选地,所述基于非叶子节点所包含的文本的停用词的数量,以及所述非叶子节点的各子节点的得分,计算得到所述目标DOM树中每一非叶子节点的得分的过程,包括:
针对所述目标DOM树中每一非叶子节点:
基于所述非叶子节点所包含的文本的停用词的数量,计算得到所述非叶子节点的第一得分P1;
对所述非叶子节点的各子节点的得分进行累加,得到所述非叶子节点的第二得分P2;
判断所述第二得分是否大于预设的阈值;
若是,采用下述方程式计算得到所述非叶子节点的得分P:
P=P1+k×P2
其中,k为预设的系数;
若否,将所述第一得分确定为所述非叶子节点的得分。
优选地,所述阈值为不小于10的数值;所述系数为0.5至1之间的数值。
本申请第二方面提供了一种网页正文的识别装置,包括:
DOM树构建单元,用于基于待识别网页的源文件的文档结构,构建文档对象模型DOM树,所述DOM树的节点与所述文档结构中的标签一一对应;
DOM树裁剪单元,用于基于所述DOM树的每一节点所对应的标签以及所述节点的属性值,对所述DOM树进行裁剪,得到目标DOM树;
第一得分计算单元,用于基于所述目标DOM树的叶子节点所包含的文本的停用词的数量,计算得到所述目标DOM树中每一叶子节点的得分;
第二得分计算单元,用于基于所述目标DOM树中的非叶子节点所包含的文本的停用词的数量,以及所述非叶子节点的各子节点的得分,计算得到所述目标DOM树中每一非叶子节点的得分;
正文文本确定单元,用于将得分最高且距离所述目标DOM的根节点最远的节点确定为目标节点,并将所述目标节点所嵌套包含的文本确定为网页正文。
本申请第三方面提供了一种网页正文的识别设备,包括:存储器和处理器;
所述存储器,用于存储程序;
所述处理器,用于执行所述程序,实现上述的网页正文的识别方法的各个步骤。
本申请第四方面提供了一种存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时,实现如上述的网页正文的识别方法的各个步骤。
经由上述的技术方案可知,本申请首先基于待识别网页的源文件的文档结构,构建文档对象模型DOM树。其中,所述DOM树的节点与所述文档结构中的标签一一对应。通过所述DOM树,可以方便地对DOM树中的节点及其内容进行访问、删除等操作。然后,基于节点所对应的标签以及节点的属性值,对所述DOM树进行裁剪,得到目标DOM树。其中,所述裁剪可以去掉明显不包含正文内容的节点,简化了DOM树的结构,便于后续对正文内容的识别及提取。接着,基于叶子节点所包含的文本的停用词的数量,计算得到所述目标DOM树中每一叶子节点的得分。以及,基于非叶子节点所包含的文本的停用词的数量,以及所述非叶子节点的各子节点的得分,计算得到所述目标DOM树中每一非叶子节点的得分。相对于导航、广告、版权等区域,网页正文中的停用词数量是最多的,因此,通过停用词可以很好地区分网页正文区域和其它区域,并且具有广泛的适应性。最后,将得分最高且距离所述目标DOM的根节点最远的节点确定为目标节点,并将所述目标节点所嵌套包含的文本确定为网页正文。其中,得分最高意味着节点所嵌套包含的文本的停用词最多,距离根节点最远意味着节点更接近网页正文的文本。本申请利用停用词统计来确定目标DOM树中各节点的得分,可以很好地区分网页正文区域和其它区域,具有广泛的适应性,且计算过程简单,能够较为高效地正确识别出网页正文。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面介绍本申请实施例提供的网页正文的识别方法。请参阅图1,本申请实施例提供的网页正文的识别方法可以包括如下步骤:
步骤S101,基于待识别网页的源文件的文档结构,构建DOM树。
其中,DOM树的每个节点表示了对待识别网页中的HTML标签或标签内的文本项,所构建的DOM树的节点与待识别网页的源文件的文档结构中的标签一一对应。DOM树的结构精确地描述了对待识别网页的文档中标签间的相互关联性。DOM树不仅描述了待识别网页的源文件的文档结构,还定义了节点对象的行为,利用对象的方法和属性,可以方便地访问、修改、添加和删除DOM树的节点和内容。
示例性地,表1给出了一个网页的文档结构,对其进行解析,然后构建出的DOM树如图2所示,其中,为便于展示,图2仅出示了DOM树中各节点的标签。
步骤S102,基于节点所对应的标签以及节点的属性值,对该DOM树进行裁剪,得到目标DOM树。
在本步骤中,对于明显不包含正文内容的节点,进行裁剪处理。该裁剪过程可以是将该节点的父节点到该节点的连接删除掉,也可以是直接将该节点以及该节点的子节点删除掉。
表1:网页源文件的文档结构
步骤S103,基于叶子节点所包含的文本的停用词的数量,计算得到该目标DOM树中每一叶子节点的得分。
停用词是指在信息检索中,这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。
停用词最早是信息检索领域的相关科研人员提出的概念,为节省存储空间和提高搜索效率,在处理自然语言数据之前或之后会自动过滤掉某些字或词,这些字或词即被称为停用词(Stop Words)。停用词的范围可以包括语气助词、副词、介词、连接词等,该类词语对于实际的搜索过程没有帮助,因此,在信息检索时自动去除掉这些停用词。然而,对于网页而言,一般都是网页正文中的停用词数量是最多的,至于导航、广告、版权等区域一般都是名词居多。通过对节点所包含的文本的停用词进行统计,所得到的得分可以很好地反映出该节点的文本性质,例如,得分越高,则该节点所包含的文本为网页正文的概率就越高。
步骤S104,基于非叶子节点所包含的文本的停用词的数量,以及该非叶子节点的各子节点的得分,计算得到该目标DOM树中每一非叶子节点的得分。
示例性地,对于图2所示的DOM树,以main分支为例,非叶子节点p的得分,由节点p所包含的文本的停用词数量以及子节点strong、子节点i和子节点a的得分共同决定;非叶子节点div的得分,由节点div所包含的文本的停用词数量以及子节点p的得分共同决定。
步骤S105,将得分最高且距离目标DOM的根节点最远的节点确定为目标节点,并将目标节点所嵌套包含的文本确定为网页正文。
可以理解的是,目标节点所嵌套包含的文本,是指目标节点以及目标节点的各级子节点所包含的文本。其中,得分最高意味着节点所嵌套包含的文本的停用词最多,距离根节点最远意味着节点更接近网页正文的文本。
本申请首先基于待识别网页的源文件的文档结构,构建文档对象模型DOM树。其中,该DOM树的节点与文档结构中的标签一一对应。通过该DOM树,可以方便地对DOM树中的节点及其内容进行访问、删除等操作。然后,基于节点所对应的标签以及节点的属性值,对该DOM树进行裁剪,得到目标DOM树。其中,通过裁剪可以去掉明显不包含正文内容的节点,简化了DOM树的结构,便于后续对正文内容的识别及提取。接着,基于叶子节点所包含的文本的停用词的数量,计算得到目标DOM树中每一叶子节点的得分。以及,基于非叶子节点所包含的文本的停用词的数量,以及该非叶子节点的各子节点的得分,计算得到目标DOM树中每一非叶子节点的得分。相对于导航、广告、版权等区域,网页正文中的停用词数量是最多的,因此,通过停用词可以很好地区分网页正文区域和其它区域,并且对于不同网页具有广泛的适应性。最后,将得分最高且距离目标DOM的根节点最远的节点确定为目标节点,并将目标节点所嵌套包含的文本确定为网页正文。其中,得分最高意味着节点所嵌套包含的文本的停用词最多,距离根节点最远意味着节点更接近网页正文的文本。本申请利用停用词统计来确定目标DOM树中各节点的得分,可以很好地区分网页正文区域和其它区域,具有广泛的适应性,且计算过程简单、易于实现,能够较为高效地正确识别出网页正文。
在某些情况下,通过上述各步骤所确定出的目标节点的得分,可能仍然较低。例如,对于某些仅包含图片或视频的网页,可能根本不存在网页正文,或者并非用户所需要的网页正文。那么,在这种情况下,步骤S105中目标节点所包含的文本可能并非用户所需要的网页正文。
基于此,在本申请的一些实施例中,请参阅图3,在上述步骤S105确定出目标节点之后,确定出网页正文之前,还可以包括:
S1,判断目标节点的得分是否高于预设的分数阈值;若是,执行S2;若否,执行S3。
S2,确定目标DOM树存在对应的网页正文,继续执行下一步。
S3,确定目标DOM树不存在对应的网页正文,结束整个识别流程。
仅仅能准确识别网页正文对于某些应用系统来说是不够的,这些系统还需要一个能较快提取网页正文的技术方案,为了加快网页正文提取的速度,本申请提出将深度优先算法融入到识别过程中。
基于此,在本申请的一些实施例中,上述步骤S102、步骤S103以及步骤S104的执行过程,可以包括:
S1,利用深度优先算法遍历该DOM树,以遍历到的第一个节点作为当前节点。
S2,对于当前节点,基于该节点所对应的标签以及节点的属性值,判断是否需要对该DOM树进行裁剪;若是,执行S3;若否,执行S4。
S3,对该DOM树进行裁剪,并继续遍历下一节点,以下一节点作为当前节点,返回执行S2。
S4,判断当前节点是否为叶子节点;若是,执行S5;若否,执行S6。
S5,基于该节点所包含的文本的停用词的数量,计算得到该节点的得分,并继续遍历下一节点,以下一节点作为当前节点,返回执行S2。
S6,基于该节点所包含的文本的停用词的数量,以及该节点的各子节点的得分,计算得到该节点的得分,并继续遍历下一节点,以下一节点作为当前节点,返回执行S2。
本申请上述实施例将深度优先算法融入到识别过程中,使得整个过程只需一次遍历就可以完成目标节点的识别工作,具体地,遍历整棵DOM树,删除不感兴趣的节点,并计算出各节点的得分,从而识别出包含网页正文的目标节点。当识别出目标节点后,还可以通过第二次遍历,提取出以目标节点为起点的子树所包含的文本,以最终得到网页正文。
从上述技术方案中可以看到,每个节点的分数只取决于该节点所包含的文本以及该节点下所有子节点的得分,意味着,对于每一节点,在判断该节点是否得分最高之前,必须等待其所有子节点都先处理完毕。当根据上述技术方案计算出每一节点的得分后,该得分即是最终结果,且后续不会再被改变。基于此,结合深度优先的特性,在识别目标节点的过程中,DOM树中每个节点只需遍历一次,就可以找到得分最高的节点,具有较快的计算速度。
在本申请的一些实施例中,请参阅图4,上述步骤S102基于节点所对应的标签以及节点的属性值,对该DOM树进行裁剪的过程,可以包括:
遍历该DOM树,对于所遍历到的当前节点:
S1,判断当前节点所对应的标签是否属于预设的过滤标签;若是,执行S2;若否,执行S3。
其中,过滤标签用于表示在网页后台执行的代码。示例性地,HTML文档中通常采用script标签来引入脚本代码,这些标签里面的内容具体描述了需要在后台执行哪些脚本代码,明显不属于网页正文。因此,可以将该类节点过滤掉。
S2,将当前节点的分支从DOM树中移除。
具体地,可以将当前节点的父节点到当前节点的连接删除掉,亦即DOM树中由当前节点开始的树枝裁剪掉;也可以干脆将当前节点以及当前节点的各级子节点删除掉。无论哪种方式,处理后,当前节点开始的树枝都对DOM树不可见了。
S3,判断当前节点所对应的当前标签是否属于预设的高层标签;若是,结束对该节点的处理;若否,执行S4。
其中,高层标签用于表示DOM树中含有丰富信息的标签,例如html、body等处于DOM中较高层的标签,通常包含有比较多的信息,这些标签不应该被删除掉。
S4,判断当前标签的属性值是否包含预设的过滤字符串,若是,执行S5;若否,结束对该节点的处理。
其中,过滤字符串用于表示不感兴趣的文本。例如,在有些应用场合中,网页中的评论内容不属于感兴趣对象,因此,可以将属性值为comment的字节过滤掉。
S5,将当前节点的分支从DOM树中移除。
通过上述处理过程,可以将明显不包含网页正文的节点过滤掉,精简DOM树的结构。
在本申请的一些实施例中,上述S1提及的过滤标签可以包括style、script、aaplet和textarea。上述S3提及的高层标签可以包括html和body。上述S4提及的过滤字符串可以包括comment。
在本申请的一些实施例中,上述步骤S103目标DOM树中的叶子节点所包含的文本的停用词的数量的获取过程,可以包括:
针对目标DOM树中每一叶子节点:
S1,利用动态规划算法对该节叶子点所包含的文本进行分词,得到多个词。
S2,基于预设的停用词库,统计该多个词所包含的停用词的数量,并将该数量确定为该叶子节点所包含的文本的停用词的数量。
此外,还可以直接将停用词的数量确定为该叶子节点的得分。
其中,动态规划(Dynamic Programming)算法与分治算法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。例如,可以采用现有的维特比算法(Viterbi algorithm)来对节点所包含的文本进行分词。维特比算法作为动态规划算法的一种,可以用于结合马尔可夫信息源上下文和隐马尔可夫模型,发现最可能的上下文无关的派生(解析)的字符串,最终实现分词。
该停用词库可以包括多个语种或者单个语种的相关停用词,例如,如果只关注中文网页中的正文,那么,该停用词库可以只包含中文停用词;如果除了中文,还关注外文网页中的正文,那么,该停用词库可以包含中文及其他所关注的外文的相关停用词。
基于此,在本申请的一些实施例中,该停用词库包括至少一个语种的停用词。上述S2基于预设的停用词库,统计该多个词所包含的停用词的数量的过程,可以包括:
基于停用词库中各语种的停用词,统计该多个词所包含的停用词的数量。
在本申请的一些实施例中,上述步骤S104基于非叶子节点所包含的文本的停用词的数量,以及该非叶子节点的各子节点的得分,计算得到目标DOM树中每一非叶子节点的得分的过程,可以包括:
针对目标DOM树的每一非叶子节点:
S1,基于该非叶子节点所包含的文本的停用词的数量,计算得到该非叶子节点的第一得分P1。
S2,对该非叶子节点的各子节点的得分进行累加,得到该非叶子节点的第二得分P2。
S3,判断该第二得分是否大于预设的阈值;若是,执行S4;若否,执行S5。
S4,采用下述方程式计算得到所述非叶子节点的得分P:
P=P1+k×P2
其中,k为预设的系数。
S5,将该第一得分P1确定为该非叶子节点的得分P:
P=P1
其中,上述S3提及的阈值以及上述S4提及的系数可以根据实际需要而设置具体的值。在本申请的一些实施例中,上述S3提及的阈值为不小于10的数值,典型取值为10;上述S4提及的系数k为0.5至1之间的数值,典型取值为k=0.8。
以下结合上述各实施例,以一个具体的伪代码例子来实现网页正文的识别。该伪代码的总体架构如图5所示,具体地,包括如下步骤:
S1、根据待识别网页的源文件的文档结构,构建DOM树。
S2、定义指针变量TextNode,将其初始化为空,用于记录DOM树的目标节点的地址;定义整型变量TextScore,将其初始化为-1,用于记录目标节点对应的分数;定义字符串变量Text,将其初始化为空,用于记录网页正文内容。
S3、使用深度优先算法遍历该DOM树。具体地,输入DOM树的根节点,然后按如下流程处理:
S31、检验该节点的标签是否属于预设的忽略标签。
若是,则结束对于该节点的处理;若否,则进入下一步。
其中,忽略标签用于表征不需要进行处理的、可忽略掉的标签,例如标签<a>,该标签在超文本标准中代表链接,网页正文部分和非正文部分一般都会有该标签,忽略该标签可以提高识别网页正文的准确率,同时因为这个标签可能包括正文,所以不能删除这个节点,简而言之,我们不想忽略标签<a>中的文字的同时,也不想让其中的文字对网页正文的判断产生影响。
S32、检验该节点的标签是否属于预设的过滤标签。
若是,则删除该节点的父节点指向该节点的连接,相当于在DOM树中剪掉了以该节点为起点的整棵子树,并结束对于该节点的处理;若否,则进入下一步。
S33、检验该节点的标签是否属于高层标签。
若是,则进入下一步;若否,则判断该节点的属性值是否包含预设的过滤字符串。例如,判断该节点的id属性、class属性、name属性是否包括过滤字符串集合(如comment等字符串)中的任意内容。
若是,则删除该节点的父节点指向该节点的连接,并结束对于该节点的处理;若否,则进入下一步。
S34、检验该节点是否有子节点。
若是,则以递归的方式处理每个子节点,对于每个子节点,返回执行步骤S31,处理对象为该子节点,待所有子节点处理完之后,进入下一步;
若否,则进入下一步。
S35、获得该节点所有子节点的分数之和P2,并将P2和一个事先设定的阈值(例如10)进行比较。
如果P2大于该阈值,则用P2和一个衰减系数(取值范围在0~1之间,例如0.8)的乘积来升级该节点的得分,升级流程如下:
获取该节点原来的得分,如果成功获取到,则设置该节点的得分为原得分加上新得分,如果没有获取到,则直接设置该节点的得分为新得分;升级结束后进入下一步;
如果P2小于等于该阈值,则直接进入下一步。
S36、获取该节点的对应的文本,使用分词系统对该文本进行分词,统计停用词的数量P1,并用停用词的数量P1来升级该节点的得分,然后进入下一步;
S37、比较该节点的得分和TextScore。
如果该节点的得分较高,则使TextScore的取值等于该节点的得分,并设置TextNode的取值为该节点的地址,然后进入下一步;
如果该节点的分数小于或等于TextScore,则直接进入下一步;
S38、获取该节点尾部对应的文本,使用分词系统对该文本进行分词,统计停用词的数量,并用停用词的数量来升级该节点的父节点的得分,结束该节点的处理。
S4、判断TextScore的取值是否大于某个事先设定的阈值(例如30):
如果TextScore大于该阈值,则进入下一步;
如果TextScore小于或等于该阈值,则整个流程结束,确认该网页不存在对应的正文。
以上步骤完成的目标节点的识别,接着获取以该目标节点为根节点的分支所包含的文本内容。
S5、以TextNode变量中存入的地址为起点,遍历整棵子树,具体地,输入TextNode对应的节点,然后按如下流程处理:
S51、使用将该节点的文本更新Text,更新流程如下:如果Text为空,则Text直接为输入的文本,如果Text不为空,则将输入的文本拼接到Text中字符串的后面,然后将拼接后的字符串作为Text的取值。
S52、检验该节点是否有子节点:
若是,则针对每个子节点,回到S51步骤处理该子节点,直到所有子节点处理结束后进入下一步;
若否,直接进入下一步。
S53、使用该节点的尾部文本更新Text,结束该节点的处理;
S6、输出Text作为该网页的正文文本,整个流程结束。
示例性地,对于表1所示的网页源文件,上面示例中遍历结束后TextNode会指向<div id=”main”>后面的节点<p>,因为其中停用词数量更多,菜单、导航栏以及广告模块一般都是停用词较少而名词较多,遍历该子树,得到正文Text为“节点p的文本内容,节点strong的文本内容,节点strong尾部的文件内容,节点i的文本内容,节点i尾部的文件内容,节点a的文本内容,节点a尾部的文件内容”。
下面对本申请实施例提供的网页正文的识别装置进行描述,下文描述的网页正文的识别装置与上文描述的网页正文的识别方法可相互对应参照。
请参见图6,本申请实施例提供的网页正文的识别装置,可以包括:
DOM树构建单元21,用于基于待识别网页的源文件的文档结构,构建文档对象模型DOM树,所述DOM树的节点与所述文档结构中的标签一一对应;
DOM树裁剪单元22,用于基于所述DOM树的每一节点所对应的标签以及所述节点的属性值,对所述DOM树进行裁剪,得到目标DOM树;
第一得分计算单元23,用于基于所述目标DOM树的叶子节点所包含的文本的停用词的数量,计算得到所述目标DOM树中每一叶子节点的得分;
第二得分计算单元24,用于基于所述目标DOM树中的非叶子节点所包含的文本的停用词的数量,以及所述非叶子节点的各子节点的得分,计算得到所述目标DOM树中每一非叶子节点的得分;
正文文本确定单元25,用于将得分最高且距离所述目标DOM的根节点最远的节点确定为目标节点,并将所述目标节点所嵌套包含的文本确定为网页正文。
在本申请的一些实施例中,DOM树裁剪单元22基于节点所对应的标签以及节点的属性值,对所述DOM树进行裁剪的过程,可以包括:
遍历所述DOM树,对于所遍历到的当前节点:
判断当前节点所对应的标签是否属于预设的过滤标签,所述过滤标签用于表示在网页后台执行的代码;
若是,将当前节点的分支从所述DOM树中移除;
若否,判断当前节点所对应的当前标签是否属于预设的高层标签,所述高层标签用于表示DOM树中含有丰富信息的标签;
若当前标签不属于预设的高层标签,判断当前标签的属性值是否包含预设的过滤字符串,所述过滤字符串用于表示不感兴趣的文本;
若当前标签的属性值包含预设的过滤字符串,将当前节点的分支从所述DOM树中移除。
在本申请的一些实施例中,所述过滤标签包括style、script、aaplet和textarea;所述高层标签包括html和body;所述过滤字符串包括comment。
在本申请的一些实施例中,所述网页正文的识别装置还可以包括停用词统计单元,用于获取指定文本的停用词的数量。所述停用词统计单元获取目标DOM树中的叶子节点所包含的文本的停用词的数量的过程,可以包括:
针对所述目标DOM树中每一叶子节点:
利用动态规划算法对所述叶子节点所包含的文本进行分词,得到多个词;
基于预设的停用词库,统计所述多个词所包含的停用词的数量,并将所述数量确定为所述叶子节点所包含的文本的停用词的数量。
在本申请的一些实施例中,第一得分计算单元23基于节点所包含的文本的停用词的数量,计算得到所述目标DOM树中每一叶子节点的得分的过程,包括:
针对所述目标DOM树中每一叶子节点:
利用动态规划算法对所述节点所包含的文本进行分词,得到多个词;
基于预设的停用词库,统计所述多个词所包含的停用词的数量,并将所述数量确定为所述叶子节点的得分。
在本申请的一些实施例中,所述停用词库包括至少一个语种的停用词。
在本申请的一些实施例中,第二得分计算单元24基于非叶子节点所包含的文本的停用词的数量,以及所述非叶子节点的各子节点的得分,计算得到所述目标DOM树中每一非叶子节点的得分的过程,可以包括:
针对所述目标DOM树中每一非叶子节点:
基于所述非叶子节点所包含的文本的停用词的数量,计算得到所述非叶子节点的第一得分P1;
对所述非叶子节点的各子节点的得分进行累加,得到所述非叶子节点的第二得分P2;
判断所述第二得分是否大于预设的阈值;
若是,采用下述方程式计算得到所述非叶子节点的得分P:
P=P1+k×P2
其中,k为预设的系数;
若否,将所述第一得分确定为所述非叶子节点的得分。
在本申请的一些实施例中,所述阈值为不小于10的数值;所述系数为0.5至1之间的数值。
本申请实施例提供的网页正文的识别装置可应用于网页正文的识别设备,如计算机等。可选的,图7示出了网页正文的识别设备的硬件结构框图,参照图7,网页正文的识别设备的硬件结构可以包括:至少一个处理器31,至少一个通信接口32,至少一个存储器33和至少一个通信总线34。
在本申请实施例中,处理器31、通信接口32、存储器33、通信总线34的数量为至少一个,且处理器31、通信接口32、存储器33通过通信总线34完成相互间的通信;
处理器31可能是一个中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本申请实施例的一个或多个集成电路等;
存储器32可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatilememory)等,例如至少一个磁盘存储器;
其中,存储器33存储有程序,处理器31可调用存储器33存储的程序,所述程序用于:
基于待识别网页的源文件的文档结构,构建文档对象模型DOM树,所述DOM树的节点与所述文档结构中的标签一一对应;
基于所述DOM树的每一节点所对应的标签以及所述节点的属性值,对所述DOM树进行裁剪,得到目标DOM树;
基于所述目标DOM树的叶子节点所包含的文本的停用词的数量,计算得到所述目标DOM树中每一叶子节点的得分;
基于所述目标DOM树中的非叶子节点所包含的文本的停用词的数量,以及所述非叶子节点的各子节点的得分,计算得到所述目标DOM树中每一非叶子节点的得分;
将得分最高且距离所述目标DOM的根节点最远的节点确定为目标节点,并将所述目标节点所嵌套包含的文本确定为网页正文。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
本申请实施例还提供一种存储介质,该存储介质可存储有适于处理器执行的程序,所述程序用于:
基于待识别网页的源文件的文档结构,构建文档对象模型DOM树,所述DOM树的节点与所述文档结构中的标签一一对应;
基于所述DOM树的每一节点所对应的标签以及所述节点的属性值,对所述DOM树进行裁剪,得到目标DOM树;
基于所述目标DOM树的叶子节点所包含的文本的停用词的数量,计算得到所述目标DOM树中每一叶子节点的得分;
基于所述目标DOM树中的非叶子节点所包含的文本的停用词的数量,以及所述非叶子节点的各子节点的得分,计算得到所述目标DOM树中每一非叶子节点的得分;
将得分最高且距离所述目标DOM的根节点最远的节点确定为目标节点,并将所述目标节点所嵌套包含的文本确定为网页正文。
可选的,所述程序的细化功能和扩展功能可参照上文描述。
综上所述:
本申请首先基于待识别网页的源文件的文档结构,构建文档对象模型DOM树。其中,所述DOM树的节点与所述文档结构中的标签一一对应。通过所述DOM树,可以方便地对DOM树中的节点及其内容进行访问、删除等操作。然后,基于节点所对应的标签以及节点的属性值,对所述DOM树进行裁剪,得到目标DOM树。其中,所述裁剪可以去掉明显不包含正文内容的节点,简化了DOM树的结构,便于后续对正文内容的识别及提取。接着,基于叶子节点所包含的文本的停用词的数量,计算得到所述目标DOM树中每一叶子节点的得分。以及,基于非叶子节点所包含的文本的停用词的数量,以及所述非叶子节点的各子节点的得分,计算得到所述目标DOM树中每一非叶子节点的得分。相对于导航、广告、版权等区域,网页正文中的停用词数量是最多的,因此,通过停用词可以很好地区分网页正文区域和其它区域,并且具有广泛的适应性。最后,将得分最高且距离所述目标DOM的根节点最远的节点确定为目标节点,并将所述目标节点所嵌套包含的文本确定为网页正文。其中,得分最高意味着节点所嵌套包含的文本的停用词最多,距离根节点最远意味着节点更接近网页正文的文本。本申请利用停用词统计来确定目标DOM树中各节点的得分,可以很好地区分网页正文区域和其它区域,具有广泛的适应性,且计算过程简单,能够较为高效地正确识别出网页正文。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间可以根据需要进行组合,且相同相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本申请。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本申请的精神或范围的情况下,在其它实施例中实现。因此,本申请将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。