Language agnostic 以编程方式检测;“最重要的内容”;在一页上
为了自动确定html文档中最重要的数据,已经做了哪些工作(如果有的话)?举个例子,想想你的标准新闻/博客/杂志风格的网站,包含导航(可能有子菜单)、广告、评论和奖品——我们的文章/博客/新闻正文 您如何以自动化方式确定新闻/博客/杂志上的哪些信息是主要数据Language agnostic 以编程方式检测;“最重要的内容”;在一页上,language-agnostic,screen-scraping,design-patterns,Language Agnostic,Screen Scraping,Design Patterns,为了自动确定html文档中最重要的数据,已经做了哪些工作(如果有的话)?举个例子,想想你的标准新闻/博客/杂志风格的网站,包含导航(可能有子菜单)、广告、评论和奖品——我们的文章/博客/新闻正文 您如何以自动化方式确定新闻/博客/杂志上的哪些信息是主要数据 注意:理想情况下,该方法可以处理格式良好的标记和糟糕的标记。无论是有人使用段落标记来创建段落,还是使用一系列分隔符。我认为一个非常有效的算法可能是,“哪个DIV中包含的文本最多,而包含的链接很少?” 广告很少有超过两三句话的文字。例如,请看本
注意:理想情况下,该方法可以处理格式良好的标记和糟糕的标记。无论是有人使用段落标记来创建段落,还是使用一系列分隔符。我认为一个非常有效的算法可能是,“哪个DIV中包含的文本最多,而包含的链接很少?” 广告很少有超过两三句话的文字。例如,请看本页的右侧
内容区域几乎总是页面上宽度最大的区域。我可能会从标题标签中的标题和其他任何内容开始,然后按顺序过滤标题标签(即h1、h2、h3等)。。。除此之外,我想我会按照顺序,从上到下。根据样式的不同,假设页面标题具有ID或唯一类可能是安全的。有时CSS媒体部分被定义为“打印”。它的预期用途是用于“单击此处打印此页面”链接。通常人们用它来去除很多绒毛,只留下信息的精华
我会尝试阅读这种样式,然后刮去剩下的任何可见内容。我认为最简单的方法是寻找没有标记的最大文本块。然后,一旦找到它,找出它的边界并提取它。您可能希望从“非标记”中排除某些标记,如链接和图像,这取决于您的目标。如果这将有一个界面,可能包括一个复选框列表的标签排除在搜索 您还可以在DOM树中查找最低级别的元素,并找出其中哪些元素最大,但这在编写不好的页面上不起作用,因为DOM树在此类页面上经常被破坏。如果你最终使用这个,我会想出一些方法,在尝试之前看看浏览器是否进入了怪癖模式
您还可以尝试使用其中的几个检查,然后提出一个指标来决定哪一个是最好的。例如,仍然尝试使用上面我的第二个选项,但如果浏览器正常进入怪癖模式,则为其结果提供较低的“评级”。这样做显然会影响性能。您可以使用支持向量机进行文本分类。一个想法是将页面分成不同的部分(比如,考虑每个结构元素,比如div是一个文档),并收集它的一些属性,并将其转换成向量。(正如其他人所说,这可能是文字数量、链接数量、图像数量越多越好。) 首先从一大组文档(100-1000)开始,您已经选择了哪个部分是主要部分。然后使用这个集合来训练你的SVM 对于每个新文档,您只需要将其转换为向量并将其传递给SVM 这个向量模型实际上在文本分类中非常有用,您不必使用SVM。您也可以使用更简单的贝叶斯模型 如果您感兴趣,可以在中找到更多详细信息。(在线免费提供) 想想你的标准新闻/博客/杂志风格的网站,包含导航(可能有子菜单)、广告、评论和奖品——我们的文章/博客/新闻正文 您如何以自动化方式确定新闻/博客/杂志上的哪些信息是主要数据 我可能会尝试这样的方法:
- 打开URL
- 阅读该页面中指向同一网站的所有链接
- 遵循所有链接并为每个URL(HTML文件)构建DOM树
- 这将帮助您提供冗余内容(包括模板等)
- 比较同一站点上所有文档的DOM树(树漫游)
- 去除所有冗余节点(即重复、导航标记、广告等)
- 如果可能,尝试识别类似节点并剥离
- 查找该网站上其他DOM中找不到的最大唯一文本块(即唯一内容)
- 添加为进一步处理的候选项
通过使用评分系统来跟踪以前被识别为包含唯一内容的DOM节点,从而使这些节点优先用于其他页面,这可能会得到进一步改进。我会寻找带有标点符号的句子。菜单、页眉、页脚等通常包含单独的单词,但不包含以逗号结尾、以句点或等效标点结尾的句子
您可以查找包含标点符号的句子的第一个和最后一个元素,并将两者之间的所有内容都考虑在内。标题是一种特殊情况,因为它们通常也没有标点符号,但通常可以将它们识别为紧靠句子前面的Hn元素。如今,大多数新闻/博客网站都在使用博客平台。 因此,我将创建一组规则来搜索内容。 举个例子,两个最流行的博客平台是wordpress和GoogleBlogspot Wordpress帖子的标记为:
<div class="entry">
...
</div>
<div class="post-body">
...
</div>
...
Blogspot帖子的标记为:
<div class="entry">
...
</div>
<div class="post-body">
...
</div>
...
如果css类搜索失败,您可以求助于其他解决方案,确定最大的文本块等等