使用PHP在任意HTML中查找重要文本?

Xeo*_*oss 4 php regex dom text-parsing

我有一些随机的HTML布局,其中包含我想要提取的重要文本.我不能只是strip_tags()因为它会从侧边栏/页脚/标题/等中留下一堆额外的垃圾.

我发现了一个用Python构建方法,我想知道在PHP中是否有这样的东西.

这个概念相当简单:如果一行文本值得输出,请使用有关文本密度与HTML代码的信息.(这不是一个新颖的想法,但它有效!)基本过程的工作原理如下:

  1. 解析HTML代码并跟踪处理的字节数.
  2. 以每行或每段为基础存储文本输出.
  3. 将每个文本行与描述它所需的HTML字节数相关联.
  4. 通过计算文本t> o字节的比率来计算每行的文本密度.
  5. 然后通过使用神经网络确定该行是否是内容的一部分.

只需检查线路的密度是否高于固定阈值(或平均值),您就可以获得相当不错的结果,但如果您使用机器学习,系统会减少错误 - 更不用说它更容易实现了!

更新:我开始获得一个可以从随机HTML模板中提取主要内容的答案.由于我无法共享我将使用的文档 - 只需选择任意随机博客网站并尝试从布局中提取正文.请记住,标题,侧边栏和页脚也可能包含文本.请参阅上面的链接以获取建议.

Luc*_*ofi 5

  • phpQuery是一个基于jQuery JavaScript库的服务器端,可链接,CSS3选择器驱动的文档对象模型(DOM)API.

更新2

  1. 许多博客都使用CMS ;
  2. 博客html结构几乎是时候了.
  3. 避免常见的选择器 #sidebar, #header, #footer, #comments, etc..
  4. 通过标记名称避免任何小部件 script, iframe
  5. 清楚知道的内容如:
    1. /\d+\scomment(?:[s])/im
    2. /(read the rest|read more).*/im
    3. /(?:.*(?:by|post|submitt?)(?:ed)?.*\s(at|am|pm))/im
    4. /[^a-z0-9]+/im

搜索熟悉的类和ID:

  • typepad.com .entry-content
  • wordpress.org .post-entry .entry .post
  • movabletype.com .post
  • blogger.com .post-body .entry-content
  • drupal.com .content
  • tumblr.com .post
  • squarespace.com .journal-entry-text
  • expressionengine.com .entry
  • gawker.com .post-body

  • 参考: 前100名博客中选择的博客平台


$selectors = array('.post-body','.post','.journal-entry-text','.entry-content','.content');
$doc = phpQuery::newDocumentFile('http://blog.com')->find($selectors)->children('p,div');
Run Code Online (Sandbox Code Playgroud)

基于常见的html结构搜索,如下所示:

<div>
<h1|h2|h3|h4|a />
<p|div />
</div>
Run Code Online (Sandbox Code Playgroud)
$doc = phpQuery::newDocumentFile('http://blog.com')->find('h1,h2,h3,h4')->parent()->children('p,div');
Run Code Online (Sandbox Code Playgroud)

  • 真棒,我可能不会使用这个 - 但我开始了另一个赏金给你一些功劳,因为我相信其他人都可以使用它. (2认同)