sel*_*ary 3 .net html readability
背景
我正在尝试阅读和分析来自网页的内容,重点是页面的主要内容 - 没有菜单,侧边栏,脚本和其他HTML混乱.
编辑:我正在寻找一个实际上通过内容筛选的图书馆,并且仅向我提供页面中的"相关"文本(即,对于此页面,单词"review","chat","meta","about" ,顶部栏中的"faq" 将不会显示,以及"许可下的用户贡献".
那么,您是否知道用于从网站中提取内容的任何其他稳定的.Net库?
我不知道这是否仍然具有相关性,但这是一个我经常遇到的一个有趣的问题,我没有在网上看到太多关于它的材料.
我已经实现了一个工具,可以在几个月的时间内完成这项工作.出于合同义务,我不能自由地分享这个工具.但是,我可以自由地分享一些关于你能做什么的建议.
我可以向您保证,在完成自己创建可读性工具的任务之前,我们已尝试过所有选项.目前还没有这样的工具能满足我们的需要.
大!你需要一些东西
CsQuery它本身就是createFromUrl.如果要对其进行预处理并对标题进行更精细的控制,可以创建自己的帮助程序类来下载页面.(尝试与用户代理一起玩,寻找移动版本等)在内容提取领域的研究令人惊讶.突出的是使用浅文本特征的Boilerplate Detection.您还可以在本文作者的StackOverflow中阅读此答案,了解可读性的工作原理以及一些方法.
这里有一些我喜欢的论文:
根据我的经验,以下是提取内容的好策略:
简单的启发式:过滤<header>和<nav>标记,删除仅包含链接的列表.删除整个<head>部分.根据元素的名称给元素赋予负/正分数,并删除分数最低的元素(例如,包含名称的类的div navigation可能会获得较低的分数).这就是可读性的工作原理.
元内容.分析文本链接的密度,这是一个独立的强大工具,你可以比较链接文本的数量与html文本并使用它,最密集的文本通常是内容的位置.CsQuery允许您轻松地将文本量与嵌套链接标记中的文本量进行比较.
模板化.在同一网站上抓取几个页面并分析它们之间的差异,常量通常是页面布局,导航和广告.您通常可以根据相似性进行过滤.这种基于"模板"的方法非常有效.诀窍是提出一种有效的算法来跟踪模板并检测模板本身.
自然语言处理.这可能是这里最先进的方法,使用自然语言处理工具来检测段落,文本结构以及实际内容的开始和结束位置相对简单.
学习,学习是这类任务的一个非常强大的概念.在最基本的形式中,这涉及创建一个程序,该程序"猜测"HTML元素,以从网站上的一组预定义结果中删除,并了解哪些模式可以删除.根据我的经验,这种方法在每个站点的机器上最有效.
修正了选择器列表.令人惊讶的是,这是非常有效的,人们往往会忘记它.如果您使用选择器从特定的几个站点进行搜索,并且手动提取内容可能是最快的事情.如果你能:)保持简单:)
混合搭配,一个好的解决方案通常涉及多个策略,结合几个.我们最终得到了一些相当复杂的东西,因为我们将它用于复杂的任务.在实践中,内容提取是一项非常复杂的任务.不要尝试创建非常通用的东西,坚持你需要抓取的内容.测试很多,单元测试和回归对于这类程序非常重要,总是比较和阅读可读性代码,它非常简单,它可能会让你开始.
祝你好运,让我知道这是怎么回事.