转自:http://www.cnblogs.com/aisir/p/6142323.html

参考文章链接: http://www.cnblogs.com/jasondan/p/3497757.html

        http://d.wanfangdata.com.cn/Patent/CN201410007832.6/

   

基于网页分析构思出的正文提取算法

回顾以上的网页分析,如果按照文本密度来找提取正文,那么就是写这么一个算法,能够从过滤html标签后的文本中找到正文文本的起止行号,行号之间的文本就是网页正文部分。

还是从上面三个网页的分析结果看,他们都有这么一个特性:正文部分的文本密度要高出非正文部分很多。我们按照这个特性就可以很容易将算法实现,那就是基于阈(读音:yu)值去分析正文所在的位置。

那么接下来就需要解决一些问题:

  • 如何确定阈值?
  • 如何分析,一行行的分析?还是?

阈值的确定可以通过统计分析得出一个比较好的值,我在实际处理过程中,发现这个值取180是比较合适的,也就是分析文本的时候,如果所分析的文本超过了180,那么就可以认为到达了正文部分。

再有就是如何分析的问题,这个其实比较容易确定,一行行的分析效果肯定不好,如果在按行分析的过程中往下在分析几行作为一次分析效果比较好。也就是一次性分析上5行左右,将字符累加起来,看看有没有达到设定的阈值,如果达到了,那么认为已经进入正文部分了。

import re
from bs4 import BeautifulSoup,Comment
import requestsauthorset ={'责任编辑','作者'}def getcontentfromweb(src):obj = requests.get(src)return obj.textdef filter_tags(html_str):soup =BeautifulSoup(html_str)title =soup.title.string.encode().decode('utf-8')[script.extract() for script in soup.findAll('script')][style.extract() for style in soup.findAll('style')]comments = soup.findAll(text=lambda text: isinstance(text, Comment))[comment.extract() for comment in comments]reg1 = re.compile("<[^>]*>")content = reg1.sub('', soup.prettify()).split('\n')return title,contentdef getcontent(lst,title,authorset):lstlen = [len(x) for x in lst]threshold=50startindex = 0maxindex = lstlen.index(max(lstlen))endindex = 0for i,v in enumerate(lstlen[:maxindex-3]):if v> threshold and lstlen[i+1]>5 and lstlen[i+2]>5 and lstlen[i+3]>5:startindex = ibreakfor i,v in enumerate(lstlen[maxindex:]):if v< threshold and lstlen[maxindex+i+1]<10 and lstlen[maxindex+i+2]<10 and lstlen[maxindex+i+3]<10:endindex = ibreakcontent =['<p>'+x.strip()+'</p>' for x in lst[startindex:endindex+maxindex] if len(x.strip())>0]return contentdef run(url):ctthtml=getcontentfromweb(url)title,content =filter_tags(ctthtml)newcontent =getcontent(content,title,authorset)ctt =''.join(newcontent)return title,ctt

http://www.aisir.cn/

基于网页分析构思出的正文提取算法相关推荐

  1. php 正文提取算法,基于机器学习的网页正文提取方法

    摘  要: 先将网页转换为规范的DOM树,然后计算每行文本的文本密度.与标题相关度等值,并将其作为输入参数利用BP神经网络进行训练,进而形成抽取规则,最后通过实验验证该方法的可行性. 关键词: 信息提 ...

  2. java 文本分析 关键词提取_文本关键词提取算法总结

    1.TF-IDF 昨天给大家演示简单的文本聚类,但要给每个聚类再提取一两个关键词用于表示该聚类.我们还是用TFIDF算法来做,因为这是比较简单的提取特征算法,不过这里的TF是指某词在本聚类内所有文章的 ...

  3. 中线提取算法_综述|线结构光中心提取算法研究发展

    摘 要: 线结构光扫描是三维重建领域的关键技术.光条纹中心提取算法是决定线结构光三维重建精度以及光条纹轮廓定位准确性的重要因素.本文详细阐述了光条纹中心提取算法的理论基础及发展历程,将现有算法分为三类 ...

  4. php网页正文提取,通用网页正文抓取工具_任意网页正文提取API

    ArticleExtractor 智能提取任意网页正文内容 无需任何规则,输入目标内容面url地址(网站首页.列表页面除外),可轻松实现对任意新闻网页正文智能提取,并去除广告等与正文无关的内容. 提取 ...

  5. 泰迪杯数据挖掘挑战赛C题 通用论坛正文提取

    参与第五届泰迪杯,侥幸获得二等奖,简单记录一下. 一.问题的背景 在当今的大数据时代里,伴随着互联网和移动互联网的高速发展,人们产生的数据总量呈现急剧增长的趋势,当前大约每六个月互联网中产生的数据总量 ...

  6. 【爬虫】一种基于网页相似度去重的爬虫系统

    现有的技术方案: 为解决网页重复抓取的问题,现有的爬虫系统主要是以URL的维度来进行去重.简单的,直接将URL放入数据库中或者放入Redis的Set集合进行去重,复杂一些的,会综合参数名的构成和参数值 ...

  7. 基于软件分析的智能化开发新型服务与技术

    摘要:从云服务厂商的角度来给大家介绍一下,当前业界围绕该领域要做哪些事情. 本文分享自华为云社区<基于软件分析的智能化开发新型服务与技术>,作者:敏捷的小智 . 本文以技术文章的方式回顾梁 ...

  8. 声音信号基音提取算法基频和谐波处理分析

    1.内容简介 略 293-可以交流.咨询.答疑 2.内容说明 略 一. 实验原理: 傅里叶变换建立了信号频谱的概念.所谓傅里叶分析即分析信号的频谱(频率构成).频带宽度等.要想合成出一段音乐,就要了解 ...

  9. 基于论文分析Google的张量处理器TPU

    本文转载自微信公众号CPUinNUDT,由<基于论文分析Google的张量处理器TPU>及<基于论文分析Google的张量处理器TPU(补充)>两篇文章合并而成,如有相关问题, ...

  10. 基于国家统计局城乡规划数据的地名提取(1)

    实战项目-基于国家统计局城乡规划数据的地名提取(1) 超简单的小项目,涉及到简单的爬虫以及基础的python编程知识.很简单哦 最近手里有一份公司的名单,其中大部分包含了地名信息.要求根据公司名称,获 ...

最新文章

  1. Matlab编程与数据类型 -- 开关语句switch/end
  2. zookeeper基本操作(常用命令)
  3. Linux引导过程与服务控制、排障演示及运行级别(详细图解)
  4. 为什么手机最后 10% 的电量很不耐,最后1%的电量最耐用?
  5. 关于window.history.back()后退问题
  6. android原生调用nextjs方法,详解使用Next.js构建服务端渲染应用
  7. javascript中数据类型及转换、String()和toString()的区别
  8. 产品面试题:朋友圈内容为何不支持直接修改?
  9. Arcgis Javascript那些事儿(九)--自定义infowindow
  10. 在WPF中开启摄像头扫描二维码(Media+Zxing)
  11. 电源大师课笔记 3.5
  12. 快递查询 快递跟单 申通快递批量查询
  13. makefile 目标:依赖文件写法
  14. 搜狗输入法不能正常使用?
  15. 【解决】package ‘xxxx‘ is not in GOROOT
  16. sp经营许可证适用范围是什么?
  17. 请问如何快速画出此图的盒图
  18. 什么是微信附近推广告宣传?效果怎么样?是以什么方式推广?
  19. Mathcad Prime教程-solve解方程组
  20. 干货,分享!AdminEx - 响应式设计后台管理模版!!!

热门文章

  1. 47-高级路由:BGP 镜子实验
  2. ORACLE 12c RAC的常用管理命令
  3. 02、Linux下sshd以及openssl的知识点
  4. 《Google Go: A Primer》学习笔记
  5. redhat 替换centos yum源
  6. 修改linux文本模式下的分辨率
  7. 程序员的自我修养 - 符号修饰 函数签名 以及一个引申的问题: extern c
  8. 关于NSStringFromClass的一点见解
  9. 第5课 混合编程和芯片手册阅读
  10. RMAN 数据库克隆文件位置转换方法