基于深度学习的网页正文抽取方法与流程

文档序号:24726821发布日期:2021-04-16 16:16阅读:657来源:国知局
1.本发明属于互联网
技术领域
:,具体是指基于深度学习的网页正文抽取方法。
背景技术
::2.互联网上有大量的公开信息,要获取这些信息,需要采用一系列的爬取与自然语言处理技术,进行网页获取和分析处理,其中,网页正文提取是一个重要研究课题。随着万维网的发展,网页的功能、样式结构变得越来越复杂,网页内常常包含大量无用信息:广告、外部链接、导航栏等等,一般来说,我们关心的只有网页的正文内容,所谓正文,是网页中我们关心的内容信息,包括目标文字、图片、视频。3.研究的正文提取的方法很多,在特定网页范围提供了可观的准确率,现有的一种基于不同密度分布的正文提取方法,文章假设正文内容会集中出现,而构成html的除了标签就是文字,所以认为一个网页标签最少的地方就是正文。基于这个假设,文章作出一个标签分布图,这种方法的目标是那种正文较为集中的网页,如新闻网页等等,而且这种提取方式是较为粗糙的,一些分散的正文信息可能就会被这种方法遗漏。4.由于html标签通常具有某种象征意义,除了显示的语法,还体现了模块在网页中的功能:如<p>、<img>、<table>等等,html的dom(documentobjectmodel文本对象模型)树也能体现网页的视觉布局结构和逻辑结构。因此,应用dom树进行正文提取的相关论文有很多,将html解析为dom树,并用两个过滤步骤得到正文:过滤标签、过滤广告等内容,这种过滤方式是基于html标签的功能定义的:如用href、src等关键词比例过滤含有链接的内容,并认为这些内容很可能是广告,这种方式固然对大部分网站能够起到算法提出者想要达到的效果,但是随着大量非良构网站的出现,以及网站编排的复杂(比如某些正文内容也可能出现大量链接),基于规则的方法会出现需要人为不断更新的问题。事实上,2003年之后,有不少学者提出很多基于规则的网页分析方法,规则的复杂度是在随着网页设计的发展继续不断扩增的;例如一种基于dom树和标签路径结合聚类的记录提取方法,利用了重复的内容块有大量相同的分割元素的特点。这是一个具有较高稳定性的无监督学习方法,用于提取展示大量重复记录的网页正文内容,如购物网站的商品、学者的论文列表。5.除此以外,也有许多模拟人类在看一个网页的时候使用的基于视觉分块的方法。微软提出了一种以视觉为基础的网站分块算法vips,这个算法基于一个使用了13条规则定义的层级分块方式,对网页进行了网站语法角度的有效分块。严格来说,这篇文章没有进行网页的正文提取,另外,这篇文章也利用了html的dom结构进行分析;还有基于vips提出的一个数据记录提取的方法,在用vips进行内容结构树的提取,基于两个假设:数据区域总是在水平中心和数据区域总是占了整个网页很大面积,从文章结构中提取了数据记录的位置。6.近年,还诞生了许多基于机器学习、数据挖掘方法的正文抽取方法。有基于聚类的,也有基于决策树的。使用的特征被归为以下几个大类:描述独立文本块(元素)的、描述整个html文件(一列的文本块以及结构信息)的、描述在整个网页中的视觉信息的、以及描述网站中几个有相同特征的文本簇的(如上面提到的重复记录)。7.目前基于python的正文提取工具主流就有如readability、newspaper3k等等,在新闻类网页中有不错的效果。然而在实际项目中,发现这些工具对稀疏文本的正文提取都束手无策,包括百科页、人员简历页等。另外,前文提到的基于密度的正文提取方法、基于视觉的正文提取方法,都基于“正文有独立视觉特征”这个大前提。而百科、简历页样式多,而且每个样式的内容都很分散,难以应用这类方法;此外,在以前的文章中常见的基于规则的策略,无论是根据视觉元素还是根据html标签信息、内容信息等等,直观上都有不适应日益变得复杂的网页结构和部分网页设计不规范的情况,而且规则定义繁琐,实现和维护都非常复杂。技术实现要素:8.为了解决上述难题,本发明提供了一种基于深度学习的网页正文抽取方法,以dom树的标签路径的概念为出发点,以元素本身信息和相应dom结构信息作为特征选择来源,用rnn(recurrentneuralnetwork)预测每个元素是否为正文的方式来实现正文提取,这种方式既能考虑文本的位置信息、标签信息、html结构信息等语法信息,也考虑了语义信息。根据训练结果,发现模型经过简单的训练就可以对它见过的网页结构有非常好的拟合与预测能力,提高简历网页正文抽取正确率。9.为实现上述目的,本发明采取的技术方案如下:基于深度学习的网页正文抽取方法,包括如下步骤:10.1)根dom节点到叶子dom节点的数据集准备:把正文提取任务定义为一个文本分类任务:对于一个文本片段,分类为应该保留或者不应该保留,通过训练lstm模型,输入一个内容文本块,即从根dom节点到叶子dom节点的整条路径,得到一个是否保留这条路径的分类的预测概率的判断;对文本块的从属信息进行编码,html被解析为dom树,树的每个节点都是一个标签,使用从dom树根节点到目标文本块节点的标签用以表示这个路径,即为标签路径;11.2)根dom节点到叶子dom节点的数据集构建:首先,把html所有的标签找出来,并且用正则匹配找到标签的位置,把html分成标签和内容;将单独存在的、后续不关心的标签及对应的内容去掉,进行内容分配给标签的操作:若开始标签和下一个标签中间有内容,则内容分配给这个开始标签;如果结束标签前有内容未被分配,即前一个标签也是结束标签时,则把内容分配给这个标签;特殊情况时,当文本标签嵌套文本标签时,会出现上一个结束标签和下一个开始标签的中间有内容的情况,分配给上一个结束标签;html被解析成标签的序列,网页被解析为一个标签序列;按照如下规则对标签进行两两匹配,即开始标签和结束标签相匹配:准备一个空栈cache并按照标签遍历处理好的html,当遇到一个开始标签的时,直接压栈,当遇到一个cache为空的时,直接压栈;当遇到一个结束标签的时,对目前栈顶的标签和这个结束标签进行简单匹配,判断是否为相应的标签,如果不匹配,则向前搜索,直到搜到匹配的为止,然后将这个结束标签压进栈中,把cache的状态记录下来,作为之后标注的一个单位,然后把结束标签、相应的开始标签弹出,最后得到空的cache即为路径,实现标签的两两配对,并构造节点;12.3)对根dom节点到叶子dom节点的数据集中的数据进行标注:根据步骤2)得到标签路径后,根据路径中叶子节点所对应的文本,对每一行路径进行打类别标签以供深度学习模型训练和测试使用;如果这一个文本块是正文,类别标签标记为1,如果不是文正,则类别标签标记为0;13.4)利用fasttext对路径的标签进行预训练和编码:采用将词汇表中的词汇映射到向量空间的预训练技术,把每个词汇的高维表示通过使用大量无标注数据的文本语料训练深层网络结构,从而得到一组低维的模型参数,这种深层网络结构被称为“预训练模型”;先用fasttext分别对标签及其class进行预训练,得到分别为10维、50维的两组向量;给文字内容长度、终止标点符号数各1维,在进入模型后,最后两位通过一个输入层为2维、输出层为10维的神经网络,并和前面60维数据拼接为70维的向量数据作为lstm的输入;14.5)训练标签路径文本的lstm分类模型:根据步骤4)中70维的向量,把lstm模型的长度设置15,长度大于15的标签路径样本,截断其长度使其长度为15,长度小于15的标签路径样本,使用0向量补其到15的长度,将处理后的标签路径样本送入到lstm模型中,lstm模型输出的隐状态向量输入全连接网络,经全连接网络后,再经过一层softmax层,最后得到分类结果,进行交叉熵损失的反向传播整神经网络的权重;15.6)lstm模型对标签路径文本进行预测;16.7)还原抽取到的网页正文:通过后序遍历的逻辑还原dom树,并同时得到每一条标签路径,再保存一个列表keeplist保存决定保留的html,为标签定义一个类tag,保存与它对应的开始或结束标签tag.symmetric;在遍历时,如果遇到开始标签,就同时往cache和keeplist压栈;遇到结束标签,并生成标签路径,同时马上进行判断;如果是正文,就压入keeplist,如果不是,就不压入,并从前找到tag.symmetric进行删除,还原正文顺序。17.本发明采取上述结构取得有益效果如下:本发明基于深度学习的网页正文抽取方法,采用了深度学习lstm的方法解决网页正文抽取,首创基于从根节点到叶子节点的整条标签路径的信息用以对路径进行分类提取正文,相比传统的基于规则的抽取网页正文的方法、基于统计网页中的特征统计量的方法和基于机器学习的方法,一定程度上解决了鲁棒性和泛化性问题,基于深度学习的方法,无论是在模型鲁棒性,还是模型泛化能力上相比于前几种方法都有较大提升;采用预训练的技术,基于海量的网页采用fasttext训练了tag和class的嵌入表示,得到了预训练的表示,解决了tag和class嵌入表示的问题,有别于市面上已经发布的基于词或者字的预训练模型,这样做的优点是预训练技术极大的改善了后期对于标签路径的人工打标签的成本,也提高了下游用lstm进行文本分类的性能;采用自主编写的基于网页html源码的生成标签路径,解决了每个叶子节点的正文内容输出顺序是按照原文html的顺序输出的问题,保证抽取的正文文本是符合原文顺序的,不会影响到用户的阅读体验,更重要的是不会因为先后顺序影响到后续下游任务。附图说明18.图1为基于深度学习的网页正文抽取方法的流程图;19.图2为基于深度学习的网页正文抽取方法的结构图;20.图3为基于深度学习的网页正文抽取方法的标签路径样本示例图;21.图4为基于深度学习的网页正文抽取方法的测试集网页提取正文的fuzzywuzzyratio结果图。具体实施方式22.下面将对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。23.发明基于深度学习的简历页正文抽取方法,包括以下步骤:24.1、根dom节点到叶子dom节点的数据集准备25.经过对dom路径的详细分析,总结出把正文提取任务定义为一个文本分类任务:对于一个文本片段,把它分类为应该保留或者不应该保留(由训练出来的深度学习模型决定),通过训练lstm模型(多特征作为输入),期待通过输入一个内容文本块(也就是从根dom节点到叶子dom节点的整条路径),得到一个是否保留这条路径的分类的预测概率的判断。26.深度学习是文本分类的常见方法,不过本发明不同于其他文本分类方法的是,希望对文本块的从属信息进行编码(即某个标签包含于某个标签),而不是在网页中出现的顺序,这里引入标签路径的概念,html可以被解析为dom树,树的每个节点都是一个标签,使用从dom树根节点到目标文本块节点的标签来表示这个路径,而这个路径就是标签路径。27.本文选择一个具体的应用场景,即爬取中文互联网上所有高校和科研院所的公开的人员履历或简历,来验证算法效果。在这个验证场景中,正文抽取的网页对象设定为到人员简历页类网页。对于其他场景的网页正文爬取,可以通过标注相应主题的网页来实现。本发明中使用的训练集由上面提到的标签路径组成。在国内高校网站中抽取800个教师简历页的网页,另外再抽取300个随机网页,得到一个含1100个网页的网页集合。然后,逐一的进行dom树提取,并得到各个内容块的标签路径,这些路径会组成一个基础供给lstm模型训练的数据集。之后的训练集、测试集、验证集都是从这个数据集中划分得到的。28.2、根dom节点到叶子dom节点的数据集构建29.对于1100个网页的网页集合中的每个网页,首先,把整个html所有的标签都找出来,并且用正则匹配把这些标签的位置都找到了,至此整个html就被分成了标签和内容。为了后续对标签进行两两匹配(开始标签和结束标签),把一些会单独存在的,或者后续不关心的标签及他们对应的内容去掉了,如:<meta>、<script>、<iframe>、<img>,等等,然后进行了一个把内容分配给标签的操作,这个网页就可以被正式解析为一个标签序列了,具体分配的规则如下:开始标签和下一个标签中间有内容,则内容分配给这个开始标签;如果结束标签前有内容未被分配(即前一个标签也是结束标签时),则把内容分配给这个标签;有一种特殊情况:当文本标签嵌套文本标签的时候(如:<p>嵌套几个<strong>时),会出现上一个结束标签和下一个开始标签的中间有内容的情况,这种情况会认为这整块内容在后续的判断中是没有必要区分的,所以无论匹配给上一个结束标签还是下一个开始标签都可以,这里是把他分配给上一个结束标签了,至此,html已经被解析成标签的序列了。30.对于遍历dom树,其实目的是得到每一个叶子节点的路径信息,如:<html><body><div><div><div><p>,为了得到每个节点的路径信息,会在构建这个dom树的同时对树进行后序遍历并返回每个节点的路径,通过“父母节点的结束标签必定在他们后代节点的结束标签后面”这个规则,实现标签的两两配对,并构造节点。具体方式是如下:准备一个空栈cache并按照标签遍历这个处理好的html,当遇到一个开始标签或者cache为空的时候,直接压栈;当遇到一个结束标签的时候,对目前栈顶的标签和这个结束标签做一个简单匹配,看看他们可不可能是相应的标签(注意:即使他们属于同一类型,但是也可能由于网站语法问题,而导致他们实际上不是相互匹配的开始标签和结束标签),如果不匹配,则向前搜索(中间的部分则融入这个节点的内容中)直到搜到匹配的为止,然后把这个结束标签压进栈中,把cache的状态记录下来,作为之后标注的一个单位,然后把结束标签、相应的开始标签(以及中间所有内容)弹出。用这种方式,最后会得到一个空的cache(最后一次弹出为<html></html>),和很多保留的cache的快照,也就是所需要的路径了。31.经过了以上操作后就得到了一个含有很多条标签路径的集合,也就是供lstm模型进行训练的训练集。32.3、对根dom节点到叶子dom节点的数据集中的数据进行标注33.上一步骤中,介绍了标签路径的构造方法,得到这些标签路径之后,根据路径中叶子节点所对应的文本,对每一行路径进行打类别标签以供深度学习模型训练和测试使用;如果这一个文本块是正文,类别标签标记为1,如果不是文正,则类别标签标记为0,样本样例如图1所示。34.4、利用fasttext对路径的标签进行预训练和编码35.所谓预训练技术是把词汇表中的词汇映射到向量空间的技术,把每个词汇的高维表示通过使用大量无标注数据的文本语料来训练深层网络结构,从而得到一组低维的模型参数,这种深层网络结构被称为“预训练模型”,训练好的模型参数应用到后续的其他特定任务上。使用这种技术可以大大提高下游任务的效果,并且放宽对标注数据量的要求。36.本发明中的预训练的技术选型使用的是gensim库中的fasttext模型,先用fasttext分别对标签及其class进行预训练(只是对有class的div、table标签,其他编码为全0),得到分别为10维、50维的两组向量;另外,给文字内容长度、终止标点符号数各1维,一共62维,在进入模型后,会让最后两位通过一个输入层为2维输出层为10维的神经网络,并和前面60维数据拼接为一个70维的向量数据作为lstm的输入。37.之所以考虑用fasttext进行预训练,原因是对于中文网站网页html中的class,网页开发者可能会用英文、拼音、英文缩写、或者拼音缩写来表示类名,所以在应用模型的时候,会遇到一些表外词(没有在预训练训练集中出现的词),而fasttext很好地解决了这个问题:fasttext对形态学进行应用,和用skip‑gram进行训练,能够快速从庞大的文集中训练处模型,并且拥有处理表外词的能力。另外,按照分隔符把训练集中的连词都分开了,这样是为了尽量让每一个词都有意义,尽量减少在下游任务遇到表外词的出现。38.5、训练标签路径文本的lstm分类模型39.在上一步骤中已经的到维度是70维的向量,那么本发明中是把lstm模型的长度设置15,对于长度大于15的标签路径样本,截断其长度使其长度为15,对于长度小于15的标签路径样本,直接补其到15的长度,补齐的向量都是0向量。这样处理后的标签路径样本就可以送入到lstm模型里面,lstm模型输出的隐状态向量就输入给全连接网络,经过全连接网络后,再经过一层softmax层,最后得到分类结果。进行交叉熵损失的反向传播来调整神经网络的权重。40.其中lstm模型的参数设置情况为:dropout为0.3,、隐藏层单元数为128,lstm层数为2,输出为2个类(是正文或不是正文),优化器为adam,学习率为0.001。交叉熵损失函数,超参设置batch_size是32、至少经过100个epochs,之后只要连续20个epochs都没有产生更优的loss和f1score,则停止训练。41.6、lstm模型对标签路径文本进行预测42.在上一步骤结束后,就已经得到了能抽取网页正文的深度学习模型。那么获取得到一篇新的网页html,按如同步骤1中处理方式,处理得到这篇html对应的标签路径集合。之后会按照步骤3中的编码部分一样的操作方法,对标签路径集合里面的每条标签路径进行编码表示,使其能转化为lstm模型适配的输入tensor。在经过lstm神经网络前向运算后,就得到了此条标签路径的分类结果,如果是1则保留。如果是0则去除。这样就得到了保留下来的标签路径的集合。43.7、还原抽取到的网页正文44.通过后序遍历的方式还原出dom树并按这个顺序输出最后的正文。最后得到正文的标签路径集后,如果直接拼接其中的正文会有如下问题:在遇到循环嵌套的文字时,一般会先遍历里面的内容(后代节点),再遍历父母节点。通常,只有最深的叶子节点才会有内容,但是某些网站的设计、或者在渲染如论文这一类内容的时候,会有大量的内容嵌套,这时候,按照直接拼接的方式还原正文就会出现乱序。45.为了解决这个问题,本发明中使用了还原html的方式来还原这个顺序,因为唯一保留原文顺序的就只有html,把预测的步骤提前到了构建路经集的时候,和步骤1中提到的一样,通过后序遍历的逻辑还原dom树,并同时得到每一条标签路径,不过这次再保存一个列表keep_list来保存决定保留的html。另外,为标签定义一个类tag,目标是保存与它对应的开始(结束)标签tag.symmetric。在遍历的时候,如果遇到开始标签,就同时往cache和keep_list压栈;遇到结束标签,并生成标签路径,就马上进行判断,如果是正文,就压入keep_list,如果不是,就不压入,并从前找到tag.symmetric进行删除。这种方式的时间复杂度是o(n2),经过这些流程后就得到抽取出的网页正文。[0046][0047]为更好的说明本发明的目的、技术方案和优点,下面将结合附图和具体对比例和实施例对本发明作进一步说明。[0048]对比例1[0049]基于readability的网页正文抽取,readability其实并不是针对某个语言的库,而是一个算法,做成一个叫mercury‑parser的一个包,做成了chrome的一个插件,所有参数都是按照其原有包里面的默认参数,未做改动,对测试集中的304篇网页做正文抽取,效果如图4虚线。[0050]对比例2[0051]基于newspaper3k的网页正文抽取。newspaper3k也是应用了lxml基于python对html进行解析的优越性能的,所有参数都是按照其原有包里面的默认参数,未做改动,对测试集中的304篇网页做正文抽取,效果如图4点线。[0052]实施例1[0053]通过预训练的fasttext模型对输入的标签路径进行编码表示,得到了lstm模型的输入,结合标签路径的分类进行训练lstm,本发明中的lstm模型直接使用pytorch框架进行实现。参数设置如下:最大标签路径的序列长度设为15(长于15个的标签路径只输入前15个标签)、dropout为0.3,、隐藏层单元数为128,lstm层数为2,输出为2个类(是正文或不是正文),优化器为adam,学习率为0.001,损失函数为交叉熵函数,batchsize是32,至少经过100个epochs,之后只要连续20个epochs都没有产生更优的loss和f1score,则停止训练。通过这样的方式得到了正文抽取模型。对测试集中的304篇网页进行抽取正文测试,实验结果如图4实线。[0054]以上对比例1,对比例2,以及实施例1中,采用的模糊字符串匹配的方式进行效果评估,先用这三个工具对验证集的300余个网站进行正文提取,另外根据标注提取一份正文作为标准答案。为了消除分割方式造成的误差,统一将结果的空格和换行符全部取出,用fuzzywuzzy实现模糊字符串匹配,fuzzywuzzy是一个基于levenshtein距离的一个字符串相似度衡量工具,而levenshtein距离表现的是一个字符串至少需要变换几个字符才能变成另外一个字符和标准长度。fuzzywuzzy衡量字符串相似度的度量是levenshtein距离和两个字符串平均长度的比率,这个得分越高,说明两个字符串越相似。[0055]图4的横坐标是网页序号,纵坐标是某个工具在这个网页提取的正文和标准答案的相似度,相似度越高,则说明工具的性能越好,虚线是readability,点线是newspaper3k,实线是基于本发明lstm模型的正文提取结果。从图中明显看出,本发明的提取正文效果要好。[0056]以上对本发明及其实施方式进行了描述,这种描述没有限制性,实际的结构并不局限于此。总而言之如果本领域的普通技术人员受其启示,在不脱离本发明创造宗旨的情况下,不经创造性的设计出与该技术方案相似的结构方式及实施例,均应属于本发明的保护范围。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1