蛙蛙推荐:基于标记窗的网页正文提取算法的一些细节问题
网页的正文提取有好多种算法,有基于视觉的,基于标记窗的,基于双层决策等算法,这里讨论一些基于标记窗的算法(相对简单且效果还好)的相关细节问题,如下
问题:如何提取一个网页的标题
思路:提取网页的title,提取网页的meta里的keyword,提取网页里的所有h标签,先用title和keyword比,把title里的 keyword去掉,因为某些网站做SEO,在keyword和title里都有关键词堆叠,所以去掉重复的项,一般就是网页内容的标题了。一般一个网站的所有网页的keyword都相同,但碰上每个网页的meta keyword和本页内容相关这个算法就不灵了。然后再计算裁剪后的title和h标签(有限h1,h2次之)里提取的文本的文本相似度或者编辑距离,如果少于某个阈值,这个h标签的文本就是网页的标题。另外还要考虑title和正文标题一点关系都没有的情况。提取标题的算法有好多不可靠性,实在不行就直接去title了。
问题:如下文字,两个横杠之间的文字,
==================================================
<div>没有花香,
没有树高</div><td>((: 那就等 着沦陷吧,如果爱情真伟大</td>
<div>我早已为你种下<b>九百九十九</b>多 玫瑰</div>
<div>妹妹你坐船头,<td>哥哥我岸上走sdf</td></div>
==================================================
用正则分成以下几组字符串,引号引住的部分
1、"没有花香,\r\n没有树高"
2、" 那就等着沦陷吧,如果爱情真伟大"
3、"我早已为你种下九百九十九多玫瑰"
4、"妹妹你坐船头,哥哥我岸上走sdf"
5、"哥哥我岸上走sdf"
思路:其实就是取出html容器标签(td,div,span,p等)里的汉字部分,并且如果是嵌套容器的话,最里层的匹配一个分组,一直向外,每层算一个分组,最后把每个分组弄成一个字符串的列表
问题:如何用正则把一段html文本块取出其带格式的文本
思路:首先要去掉修饰性标签,<b>,<font>还有<img>等,其次要把<br>替换成\r\ n, 替换成空格,再把<srcipt><style>等标签及其中间的字符都去了,想<a title="嘿嘿">这个标签里的"嘿嘿"不能算是正文,正文中的链接不能去掉,要改成“百度(http://www.baidu.com)”这样的格式,否则提取文本后链接信息就没了。
问题:一个标题和多个正文,如何用程序来判断这个标题属于这个正文的
思路:把标题用中科院分词系统分词,然后去除停止词,然后根据词性标注把实词取出来,记为S,然后看每个正文里S里的每个词出现的次数,无论哪个词,取出现次数最多的那个正文就是这个标题的正文,我觉得这个思路比把标题和正文都切词后用编辑距离比较的算法更准一些,而且正文和标题切词后是两个字符串数组,两个字符串数组貌似没有现成的算法算他们之间的距离的。
问题:有若干段儿html文本块,去掉大多数为超链接的文本块
思路:先算出每个文本块中所有汉字的数量,再算出每个文本块中被<a>标签包围的汉字数量,如果这两个值的比例大于某个阈值,就删除这个文本块
以上几个文本解决后,网页的正文提取就能做的差不多了,最起码有百分之七八十的正确率吧。大家有兴趣和我一起解决哦,呵呵呵。