Language agnostic 以编程方式检测;“最重要的内容”;在一页上

Language agnostic 以编程方式检测;“最重要的内容”;在一页上,language-agnostic,screen-scraping,design-patterns,Language Agnostic,Screen Scraping,Design Patterns,为了自动确定html文档中最重要的数据,已经做了哪些工作(如果有的话)?举个例子,想想你的标准新闻/博客/杂志风格的网站,包含导航(可能有子菜单)、广告、评论和奖品——我们的文章/博客/新闻正文 您如何以自动化方式确定新闻/博客/杂志上的哪些信息是主要数据 注意:理想情况下,该方法可以处理格式良好的标记和糟糕的标记。无论是有人使用段落标记来创建段落,还是使用一系列分隔符。我认为一个非常有效的算法可能是,“哪个DIV中包含的文本最多,而包含的链接很少?” 广告很少有超过两三句话的文字。例如,请看本

为了自动确定html文档中最重要的数据,已经做了哪些工作(如果有的话)?举个例子,想想你的标准新闻/博客/杂志风格的网站,包含导航(可能有子菜单)、广告、评论和奖品——我们的文章/博客/新闻正文

您如何以自动化方式确定新闻/博客/杂志上的哪些信息是主要数据


注意:理想情况下,该方法可以处理格式良好的标记和糟糕的标记。无论是有人使用段落标记来创建段落,还是使用一系列分隔符。

我认为一个非常有效的算法可能是,“哪个DIV中包含的文本最多,而包含的链接很少?”

广告很少有超过两三句话的文字。例如,请看本页的右侧


内容区域几乎总是页面上宽度最大的区域。

我可能会从标题标签中的标题和其他任何内容开始,然后按顺序过滤标题标签(即h1、h2、h3等)。。。除此之外,我想我会按照顺序,从上到下。根据样式的不同,假设页面标题具有ID或唯一类可能是安全的。

有时CSS媒体部分被定义为“打印”。它的预期用途是用于“单击此处打印此页面”链接。通常人们用它来去除很多绒毛,只留下信息的精华


我会尝试阅读这种样式,然后刮去剩下的任何可见内容。

我认为最简单的方法是寻找没有标记的最大文本块。然后,一旦找到它,找出它的边界并提取它。您可能希望从“非标记”中排除某些标记,如链接和图像,这取决于您的目标。如果这将有一个界面,可能包括一个复选框列表的标签排除在搜索

您还可以在DOM树中查找最低级别的元素,并找出其中哪些元素最大,但这在编写不好的页面上不起作用,因为DOM树在此类页面上经常被破坏。如果你最终使用这个,我会想出一些方法,在尝试之前看看浏览器是否进入了怪癖模式


您还可以尝试使用其中的几个检查,然后提出一个指标来决定哪一个是最好的。例如,仍然尝试使用上面我的第二个选项,但如果浏览器正常进入怪癖模式,则为其结果提供较低的“评级”。这样做显然会影响性能。

您可以使用支持向量机进行文本分类。一个想法是将页面分成不同的部分(比如,考虑每个结构元素,比如div是一个文档),并收集它的一些属性,并将其转换成向量。(正如其他人所说,这可能是文字数量、链接数量、图像数量越多越好。)

首先从一大组文档(100-1000)开始,您已经选择了哪个部分是主要部分。然后使用这个集合来训练你的SVM

对于每个新文档,您只需要将其转换为向量并将其传递给SVM

这个向量模型实际上在文本分类中非常有用,您不必使用SVM。您也可以使用更简单的贝叶斯模型

如果您感兴趣,可以在中找到更多详细信息。(在线免费提供)

想想你的标准新闻/博客/杂志风格的网站,包含导航(可能有子菜单)、广告、评论和奖品——我们的文章/博客/新闻正文

您如何以自动化方式确定新闻/博客/杂志上的哪些信息是主要数据

我可能会尝试这样的方法:

  • 打开URL
  • 阅读该页面中指向同一网站的所有链接
  • 遵循所有链接并为每个URL(HTML文件)构建DOM树
  • 这将帮助您提供冗余内容(包括模板等)
  • 比较同一站点上所有文档的DOM树(树漫游)
  • 去除所有冗余节点(即重复、导航标记、广告等)
  • 如果可能,尝试识别类似节点并剥离
  • 查找该网站上其他DOM中找不到的最大唯一文本块(即唯一内容)
  • 添加为进一步处理的候选项
这种方法似乎很有希望,因为它相当简单,但仍然有很好的潜力可以适应,即使是复杂的Web2.0页面,过度使用模板,因为它可以识别同一网站上所有页面之间的相似HTML节点


通过使用评分系统来跟踪以前被识别为包含唯一内容的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类搜索失败,您可以求助于其他解决方案,确定最大的文本块等等