2

http://lab.arc90.com/experiments/readability/是一个非常方便的工具,可以以非常易读的方式查看杂乱的报纸、期刊和博客页面。它通过使用一些启发式方法并找到网页的相关正文来做到这一点。它的源代码也可以在http://lab.arc90.com/experiments/readability/js/readability.js获得

我的一些同事引起了我的注意,因为我正在努力使用 jQuery 来获取任何报纸的“正文” | 期刊 | 博客 | 等网站。我当前的启发式(和 jQuery 中的实现)使用类似的东西(这是在 Firefox Jetpack 包中完成的):

$(doc).find("div > p").each(function (index) {  
    var textStr = $(this).text();
/*
     We need the pieces of text that are long and in natural language,
     and not some JS code snippets
    */
if(textStr.length > MIN_TEXT_LENGTH && textStr.indexOf("<script") <= 0) {    
    console.log(index);    
    console.log(textStr.length);
    console.log(textStr);
    $(this).attr("id", "clozefox_paragraph_" + index);
    results.push(index);

    wholeText = wholeText + " " + textStr;
}
});

所以它就像“去抓取 DIV 中的段落并检查不相关的字符串,如'script'”。我已经尝试过了,大多数时候它可以抓取网络文章的正文,但是我想要一个更好的启发式或者更好的 jQuery 选择机制(甚至更短?)。

你有更好的建议吗?

PS:也许“找到最里面的DIV(即没有任何DIV类型的子元素)并去抓住他们的

s only”对于我目前的目的来说是一个更好的启发式方法,但我不知道如何在 jQuery 中表达这一点。

4

2 回答 2

1

这通常通过分析页面上元素的“链接密度”来完成。链接密度越高,越有可能不是内容。这是开始思考内容提取技术和算法的好地方:http ://www.quora.com/Whats-the-best-method-to-extract-article-text-from-HTML-documents

于 2011-09-27T00:00:56.473 回答
0

大多数文章都有一个矩形的文本列。尝试将元素的尺寸和它(包括子元素)包含的单词数结合起来。您可能希望偏爱窄而高的 div。

类似的东西probability of main text = (number of words) * (height / width)将是一个好的开始。

于 2011-03-24T05:19:24.020 回答