当前位置:  开发笔记 > 前端 > 正文

从HTML文档中刮取最大的文本块

如何解决《从HTML文档中刮取最大的文本块》经验,为你挑选了2个好方法。

我正在研究一种算法,在给定HTML文件的情况下,它会尝试选择它认为最有可能包含页面大部分内容文本的父元素.例如,它将在以下HTML中选择div"content":


   
      
      
This is the Main Page content. it is the longest block of text in this document and should be chosen as most likely being the important page content.

我想出了一些想法,比如遍历HTML文档树到它的叶子,加上文本的长度,只看到父母给我们的内容比孩子更多的其他文本.

有没有人尝试过这样的东西,或者知道可以应用的算法?它不必是可靠的,但只要它能猜出包含大部分页面内容文本的容器(例如文章或博客文章),那就太棒了.



1> Max..:

一个字:Boilerpipe



2> Borgar..:

以下是我将如何处理这个问题:

// get array of all elements (body is used as parent here but you could use whatever)
var elms = document.body.getElementsByTagName('*');
var nodes = Array.prototype.slice.call( elms, 0 );

// get inline elements out of the way (incomplete list)
nodes = nodes.filter(function (elm) {
  return !/^(a|br?|hr|code|i(ns|mg)?|u|del|em|s(trong|pan))$/i.test( elm.nodeName );
});

// sort elements by most text first
nodes.sort(function(a,b){
  if (a.textContent.length == b.textContent.length) return 0;
  if (a.textContent.length > b.textContent.length)  return -1;
  return 1;
});

使用类似的祖先函数a.compareDocumentPosition(b),您还可以在排序期间(或之后)接收元素,具体取决于此事物需要的复杂程度.

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有