Xeo*_*oss 4 php regex dom text-parsing
我有一些随机的HTML布局,其中包含我想要提取的重要文本.我不能只是strip_tags()因为它会从侧边栏/页脚/标题/等中留下一堆额外的垃圾.
我发现了一个用Python构建的方法,我想知道在PHP中是否有这样的东西.
这个概念相当简单:如果一行文本值得输出,请使用有关文本密度与HTML代码的信息.(这不是一个新颖的想法,但它有效!)基本过程的工作原理如下:
- 解析HTML代码并跟踪处理的字节数.
- 以每行或每段为基础存储文本输出.
- 将每个文本行与描述它所需的HTML字节数相关联.
- 通过计算文本t> o字节的比率来计算每行的文本密度.
- 然后通过使用神经网络确定该行是否是内容的一部分.
只需检查线路的密度是否高于固定阈值(或平均值),您就可以获得相当不错的结果,但如果您使用机器学习,系统会减少错误 - 更不用说它更容易实现了!
更新:我开始获得一个可以从随机HTML模板中提取主要内容的答案.由于我无法共享我将使用的文档 - 只需选择任意随机博客网站并尝试从布局中提取正文.请记住,标题,侧边栏和页脚也可能包含文本.请参阅上面的链接以获取建议.
- phpQuery是一个基于jQuery JavaScript库的服务器端,可链接,CSS3选择器驱动的文档对象模型(DOM)API.
更新2
#sidebar, #header, #footer, #comments, etc..script, iframe/\d+\scomment(?:[s])/im/(read the rest|read more).*/im/(?:.*(?:by|post|submitt?)(?:ed)?.*\s(at|am|pm))/im/[^a-z0-9]+/im搜索熟悉的类和ID:
.entry-content.post-entry .entry .post.post.post-body .entry-content.content.post.journal-entry-text.entrygawker.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)
| 归档时间: |
|
| 查看次数: |
1107 次 |
| 最近记录: |