基于文本密度的新闻正文抽取方法之Python实现

参考文章链接: 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 requests

authorset ={‘责任编辑‘,‘作者‘}

def getcontentfromweb(src):
    obj = requests.get(src)
    return obj.text

def 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,content

def getcontent(lst,title,authorset):
    lstlen = [len(x) for x in lst]
    threshold=50
    startindex = 0
    maxindex = lstlen.index(max(lstlen))
    endindex = 0
    for 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 = i
            break
    for 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 = i
            break
    content =[‘<p>‘+x.strip()+‘</p>‘ for x in lst[startindex:endindex+maxindex] if len(x.strip())>0]
    return content

def run(url):
    ctthtml=getcontentfromweb(url)
    title,content =filter_tags(ctthtml)
    newcontent =getcontent(content,title,authorset)
    ctt =‘‘.join(newcontent)
    return title,ctt
时间: 2024-10-24 01:27:49

基于文本密度的新闻正文抽取方法之Python实现的相关文章

基于Web开发模式的信息抽取

基于Web 开发模式的信息抽取 信息抽取是一个互联网自然语言处理的一个首要环节,信息抽取的准确度会直接影响到后续的处理.信息抽取的目标是去除噪音,获取网页有价值的信息如网页的标题.时间.正文.链接等信息.   主流算法介绍 网页信息抽取的方法有很多,比如从算法上分:基于模板的,基于信息量.基于视觉的.基于语义挖掘的.基于统计的.从HTML 处理上分为:基于行块.基于DOM 树.下面我逐一介绍. 1.     基于模板,一般由人工维护一个URL 和HTML 的模板.当URL 匹配到某个URL 模板

网页正文抽取

转自丕子:http://www.zhizhihu.com/html/y2013/4202.html 总结我用过的网页正文抽取工具: decruft http://t.cn/S7bVEC python-readabilityhttp://t.cn/zYeoZ8b boilerpipe http://t.cn/h41EEs python-boilerpipehttp://t.cn/zYeoyPw pismo http://t.cn/zYeoyP2 Goose http://t.cn/zYeoZ8G 

基于文本分析的参数估计

目录 0基于文本分析的参数估计... 1 1     参数估计方法... 1 1.1最大似然估计MLE. 2 1.2最大后验概率... 3 1.3贝叶斯推理... 4 2     共轭分布... 7 2.1 随机生成过程及共轭分布... 7 2.2 Multinomial分布和 Dirichlet分布... 8 3 unigram model10 3 LDA隐含狄利克雷分布... 11 3.1   Gibbs Sampling的流程... 13 3.2   LDA的联合分布... 14 3.3

crawler_基于块儿统计正文抽取_改进版

import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; /** * <p> * 在线性时间内抽取主题类(新闻.博客等)网页的正文. 采用了<b>基于行块分布函数</b>的方法,为保持通用性没有针对特定网站编写规则. * </p> * * @author Chen Xin([email protecte

文本结构化(信息抽取)技术调研与综述

文本结构化技术调研 1. 引言 文本数据一般由有序的段落.句子.单词文本流组成,而这种形式的文本通常是非结构化的,并不是结构化的表格数据,文本的特征也与噪声混杂在一起,很难直接提取出特征,也就没有办法将机器学习方法应用在原始的非结构化文本数据中.因此,我们需要一种文本结构化技术,能够自动化处理非结构化文本,并且在不损失重要信息的情况下,用结构化数据提取出该文本的主要信息. 出于不同的目的,一般采用信息抽取与特征工程的方式实现文本结构化技术,但是这两种方法在本质上属于不同类型的方法,信息抽取一般是

基于协同过滤的新闻推荐思路分享

目录结构 1,推荐系统的概率及部署 2,新闻推荐系统特点分析 3,协同过滤算法分析 4,系统评估与安全 一:推荐系统的概览及部署 首先明确一个概念,推荐系统是什么,或者说解决了什么样的一个问题. 新闻推荐系统解决的是咨询.用户和环境之间的关系,如图,通过对用户特征.环境特征.文章特征做综合分析,将最合适.有效的内容推荐给用户. 推荐系统在业务平台的定位 正所谓巧妇难为无米之炊,不光新闻推荐系统,几乎所有人工智能模型都离不开大数据组件的支持. 要做到一个“千人千面的推荐系统“,需要大数据的支持,可

机器学习 - 文本分析案例 - 新闻分析

文本分析概念 停用词 语料中大量出现, 无用数据, 如下类似的这种词语 Tf  - 词频统计 TF 的计算方式有很多, 最常见的用 某词文章中出现次数 / 文章总词数 idf  - 逆文档频率 TF - idf   关键词提取 相似度 分词 语料库 词频 词频向量 整体流程 语料清洗 (去掉停用词, 去掉大量重复的非正常用语等) 计算公式 文本分析案例 - 新闻分析 样本数据 数据来源于 搜狗实验室新闻数据   数据需要处理成  pandas 便于读取的数据才可以使用 import pandas

一个基于Android系统的新闻客户端(一)

一.整体概述 在服务器端,通过对凤凰网的抓取存入数据库,客户端通过向服务器发送请求得到新闻. 服务端用WCF,宿主为window服务,客户端为Java写的安卓程序. 二.客户端 我在eclipse里新建了个Android项目,命名为MyNewClient,eclipse自动生成二个xml布局文件,如图: 其中,fragment_main.xml是新版的布局文件,暂时不会用,把它删掉. 新建xml文件,命名为activity_foot.xml,在这里我们要做app的底部,先上代码: <?xml v

基于页面染色技术的内存数据库访问优化方法

本发明公开了一种基于页面染色技术的内存数据库访问优化方法.该方法首先将弱局部性数据集的所有数据页面的访问顺序按页面颜色进行排序,并将所有数据页面按页面颜色进行分组,然后按页面颜色分组的顺序扫描弱局部性数据集的所有数据页面.进一步地,预设若干具有相同页面颜色的内存页面作为页面颜色队列,该页面颜色队列用作内存页面被加载入CPU缓存之前的内存缓存:弱局部性数据集的数据页面首先通过异步方式进入页面颜色队列,然后再被加载到CPU缓存中完成数据处理.本发明能够解决内存数据库应用中无法依赖页面颜色为进程.线程