如果有什么工作可以自动确定html文档中最重要的数据?例如,想想您的标准新闻/博客/杂志式网站,其中包含导航(可能包含子菜单),广告,评论和奖品 - 我们的文章/博客/新闻机构。
您如何以自动方式确定新闻/博客/杂志上的哪些信息是主要数据?
注意:理想情况下,该方法可以使用格式良好的标记和可怕的标记。是否有人使用段落标记来制作段落或一系列中断。
答案 0 :(得分:11)
想想您的标准新闻/博客/杂志式网站,其中包含导航(可能包含子菜单),广告,评论和奖品 - 我们的文章/博客/新闻机构。
您如何以自动方式确定新闻/博客/杂志上的哪些信息是主要数据?
我可能会尝试这样的事情:
这种做法看起来非常有前景,因为它做起来相当简单,但仍具有很好的自适应能力,即使对于过度使用模板的复杂Web 2.0页面也是如此,因为它可以识别出类似的HTML节点。在同一网站的所有页面之间。
这可以通过使用评分系统来跟踪先前被识别为包含唯一内容的DOM节点来进一步改进,以便这些节点优先于其他页面。
答案 1 :(得分:11)
Readability做得恰到好处。
它是开源的posted on Google Code。
更新:我看到(via HN)有人将可读性用于mangle RSS feeds into a more useful format, automagically。
答案 2 :(得分:10)
有时会将CSS Media部分定义为“Print”。它的用途是“点击此处打印此页面”链接。通常人们用它来剥去大量的绒毛,只留下信息的肉。
http://www.w3.org/TR/CSS2/media.html
我会尝试阅读这种风格,然后抓住任何可见的东西。
答案 3 :(得分:2)
我认为最直接的方法是寻找没有标记的最大文本块。然后,一旦找到它,找出它的界限并提取它。您可能希望从链接和图片等“非标记”中排除某些标记,具体取决于您要定位的内容。如果这将有一个界面,可能包括要从搜索中排除的标签的复选框列表。
您也可以在DOM树中寻找最低级别,并找出哪些元素是最大的,但是在写得不好的页面上效果不佳,因为dom树经常在这些页面上被破坏。如果您最终使用此功能,我会想出一些方法来查看浏览器在尝试之前是否已进入怪癖模式。
您也可以尝试使用其中的一些检查,然后提出一个指标来确定哪个最好。例如,仍然尝试使用上面的第二个选项,但如果浏览器正常进入怪癖模式,则给它的结果降低“评级”。坚持这一点显然会影响性能。
答案 4 :(得分:2)
您可以使用支持向量机进行文本分类。一个想法是将页面分成不同的部分(比如将每个结构元素视为div是一个文档)并收集它的一些属性并将其转换为向量。 (正如其他人所说,这可能是单词数量,链接数量,图像数量越多越好。)
首先从大量文档(100-1000)开始,您已经选择哪个部分是主要部分。然后使用此集训练您的SVM。
对于每个新文档,您只需将其转换为vector并将其传递给SVM。
此向量模型在文本分类中实际上非常有用,并且您不需要必须使用SVM。您也可以使用更简单的贝叶斯模型。
如果您有兴趣,可以在Introduction to Information Retrieval找到更多详情。 (在线免费提供)
答案 5 :(得分:1)
我认为一个非常有效的算法可能是,“哪个DIV中包含少量链接的文本最多?”
很少有广告有超过两三个句子的文字。例如,请查看此页面的右侧。
内容区域几乎总是页面上宽度最大的区域。
答案 6 :(得分:0)
我可能会开始使用标题和Head标记中的任何其他内容,然后按顺序过滤标题标记(即h1,h2,h3等)......除此之外,我想我会按顺序排序,从上到下。根据它的样式,假设页面标题具有ID或唯一类别可能是一种安全的选择。
答案 7 :(得分:0)
我会用标点符号查找句子。菜单,页眉,页脚等通常包含单独的单词,但不包含以逗号结尾且以句点或等效标点结尾的句子。
您可以查找包含带标点符号的句子的第一个和最后一个元素,并将所有内容置于其间。标题是一种特殊情况,因为它们通常也没有标点符号,但您通常可以在句子之前立即将它们识别为Hn元素。
答案 8 :(得分:0)
今天,大多数新闻/博客网站都在使用博客平台。 所以我会创建一组规则来搜索内容。 例如,两个最受欢迎的博客平台是wordpress和Google Blogspot。
Wordpress帖子标有:
<div class="entry">
...
</div>
Blogspot帖子标有:
<div class="post-body">
...
</div>
如果css类的搜索失败,你可以转向其他解决方案,识别最大的文本块等等。
答案 9 :(得分:0)
虽然这显然不是 的答案,但我认为重要的内容位于样式页面的中心附近,并且通常由标题等中断的几个块组成。结构本身也可能是标记中的赠品。
文章/帖子/帖子之间的差异将是一个很好的过滤器,可以找出区分特定页面的内容(显然,这将需要进行扩充,以过滤掉广告中的随机垃圾,“当天或横幅的引用)。对于多个页面,内容的结构可能非常相似,因此不要过多依赖结构差异。
答案 10 :(得分:0)
Instapaper做得很好。您可能需要查看Marco Arment's blog以获取有关他是如何做到这一点的提示。
答案 11 :(得分:0)
由于可读性不再可用: