本发明涉及车联网系统,具体涉及一种车联网系统新闻正文提取方法。
背景技术:
RSS订阅源是获取新闻的常见通道,但是通常由于结构限制,RSS订阅源中只会包含有新闻的摘要信息,而具体的新闻正文则需要访问RSS数据中给出的新闻链接来在浏览器端展现。在没有浏览器支持的情况下(如语音播报新闻,纯文字新闻显示等),需要有一种算法能够将页面展示的新闻内容提取成为纯文本。
技术实现要素:
本发明所要解决的技术问题是:提出一种车联网系统新闻正文提取方法,在没有浏览器支持的情况下将页面展示的新闻内容提取成为纯文本,便于处理。
本发明解决其技术问题所采用的技术方案是:
车联网系统新闻正文提取方法,包括以下步骤:
a.对采用div布局结构的新闻页面进行分析,遍历页面的document对象,找到内部的所有div标签包裹的结构;
b.对于每个<div></div>标签组,使用标签堆栈记录标签,使用段落堆栈记录其在内的正文内容;
c.每提取一个段落将其加入正文堆栈中,直至所有段落提取完成;
d.对正文堆栈中的各段落的文字长度进行排序,其中文字长度最大的段落作为正文输出。
作为进一步优化,在步骤c中,将提取的段落加入正文堆栈之前还包括对段落进行调序操作:
对记录在段落堆栈中的正文内容按照出栈顺序向段落调序堆栈入栈;段落调序堆栈按照出栈顺序组成完整正文再向正文堆栈入栈。
作为进一步优化,步骤a中,当遍历页面的document对象发现干扰时,对干扰不予处理。
本发明的有益效果是:
1)可以依照指定的标签嵌套规则将网页新闻快速准确解析出对应的纯文本内容;
2)可以在一定程度上自动解析出一段网页标签嵌套中的非连续的正文段落并加以整合;
3)如果存在多种正文可能,本发明的算法可以按照正文的可能性大小排序并提取正文。
附图说明
图1为实施例中的车联网系统新闻正文提取方法流程图。
具体实施方式
本发明旨在提出一种车联网系统新闻正文提取方法,在没有浏览器支持的情况下将页面展示的新闻内容提取成为纯文本,便于处理。本发明方案包括以下步骤:
a.对采用div布局结构的新闻页面进行分析,遍历页面的document对象,找到内部的所有div标签包裹的结构;
b.对于每个<div></div>标签组,使用标签堆栈记录标签,使用段落堆栈记录其在内的正文内容;
c.每提取一个段落将其加入正文堆栈中,直至所有段落提取完成;
d.对正文堆栈中的各段落的文字长度进行排序,其中文字长度最大的段落作为正文输出。
基于上述方案,本发明具备以下功能:
1.可以依照指定的标签嵌套规则(div嵌套规则)将网页新闻解析出对应的纯文本内容;
解析正文内容依照div布局的页面,可以解析由多个div布局相嵌套的页面正文;
2.可以在一定程度上自动解析出一段网页标签嵌套中的非连续的正文段落并加以整合;
3.如果存在多种正文可能,算法可以按照正文的可能性大小排序:对解析出的正文内容按照文字占比(段落文字多少)排序并降噪,文字占比越大的排序越靠前,其为新闻正文的可能性越大。
实施例:
本实施例以对Sina新闻的新闻页面进行分析为例,如图1所示,其包括以下实现步骤:
1.由于采用了div布局结构,新闻正文或者需要展现的结构(比如图片等)都是使用div标签包裹的.我们将页面的document遍历出来找到内部的所有div包裹的结构.再根据对文字的判定来区分是不是备选的正文内容。
2.选定div标签后,每个div结构中有可能是一个嵌套的过程.对于每个<div></div>标签组我们需要使用堆栈来记录其内在的结构;
3.假定结构是<div><div>正文1</div><div>干扰</div><div>正文2</div></div>:
3.1当检测到第一个<div>标签时,我们就认为进入到了一个正文检测区域并且我们将这个<div>标记入栈操作;
3.2这个时候我们继续遍历document会得到第二个div标记(位于“正文1”前的第二个div标记),我们继续入栈这个<div>标签;
3.3继续遍历document发现“正文1”,此时我们将正文内容提取出来单独放入段落堆栈;
3.4继续遍历document发现</div>标签,此时按照算法出栈一个<div>标签;
3.5继续遍历document发现<div>标签,则继续入栈这个<div>标签;
3.6继续遍历document发现干扰(干扰包括一切不属于文字的标记内容比如<image>[图像]标记),按照规则对干扰不处理,则继续遍历document发现</div>标签,重复3.4出栈一个<div>;
3.7继续遍历document发现<div>标签,重复3.3,得到正文2放入段落堆栈(正文1|正文2);
3.8继续访问直到访问到最后的</div>,此时需要出栈最后的一个<div>标签,标签堆栈内容为空,对于一段疑似正文的div嵌套结构拆解完毕.得到段落堆栈中的(正文1|正文2),这就是一个备选正文内容;
4.段落堆栈中存放的结构是(正文1|正文2|...|正文n),这个只是一段疑似正文,正真的正文需要比对整个document,每提取出一个段落(正文1+正文2+...+正文n)我们需要将这个段落加入正文堆栈(段落1|段落2|...|段落n)。
5.新闻页面有一个特点是,正文在绝大多数情况下是文字占比最大的段落,所以我们对正文堆栈的内容做长度排序,最长段落就是最大几率的新闻正文,输出该段落的文字内容即可。