Python实现提取文章摘要的方法


Posted in Python onApril 21, 2015

本文实例讲述了Python实现提取文章摘要的方法。分享给大家供大家参考。具体如下:

一、概述

在博客系统的文章列表中,为了更有效地呈现文章内容,从而让读者更有针对性地选择阅读,通常会同时提供文章的标题和摘要。

一篇文章的内容可以是纯文本格式的,但在网络盛行的当今,更多是HTML格式的。无论是哪种格式,摘要 一般都是文章 开头部分 的内容,可以按照指定的 字数 来提取。

二、纯文本摘要

纯文本文档 就是一个长字符串,很容易实现对它的摘要提取:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Get a summary of the TEXT-format document"""
def get_summary(text, count):
  u"""Get the first `count` characters from `text`
    >>> text = u'Welcome 这是一篇关于Python的文章'
    >>> get_summary(text, 12) == u'Welcome 这是一篇'
    True
  """
  assert(isinstance(text, unicode))
  return text[0:count]
if __name__ == '__main__':
  import doctest
  doctest.testmod()

三、HTML摘要

HTML文档 中包含大量标记符(如<h1>、<p>、<a>等等),这些字符都是标记指令,并且通常是成对出现的,简单的文本截取会破坏HTML的文档结构,进而导致摘要在浏览器中显示不当。

在遵循HTML文档结构的同时,又要对内容进行截取,就需要解析HTML文档。在Python中,可以借助标准库 HTMLParser 来完成。

一个最简单的摘要提取功能,是忽略HTML标记符而只提取标记内部的原生文本。以下就是类似该功能的Python实现:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Get a raw summary of the HTML-format document"""
from HTMLParser import HTMLParser
class SummaryHTMLParser(HTMLParser):
  """Parse HTML text to get a summary
    >>> text = u'<p>Hi guys:</p><p>This is a example using SummaryHTMLParser.</p>'
    >>> parser = SummaryHTMLParser(10)
    >>> parser.feed(text)
    >>> parser.get_summary(u'...')
    u'<p>Higuys:Thi...</p>'
  """
  def __init__(self, count):
    HTMLParser.__init__(self)
    self.count = count
    self.summary = u''
  def feed(self, data):
    """Only accept unicode `data`"""
    assert(isinstance(data, unicode))
    HTMLParser.feed(self, data)
  def handle_data(self, data):
    more = self.count - len(self.summary)
    if more > 0:
      # Remove possible whitespaces in `data`
      data_without_whitespace = u''.join(data.split())
      self.summary += data_without_whitespace[0:more]
  def get_summary(self, suffix=u'', wrapper=u'p'):
    return u'<{0}>{1}{2}</{0}>'.format(wrapper, self.summary, suffix)
if __name__ == '__main__':
  import doctest
  doctest.testmod()

HTMLParser(或者 BeautifulSoup 等等)更适合完成复杂的HTML摘要提取功能,对于上述简单的HTML摘要提取功能,其实有更简洁的实现方案(相比 SummaryHTMLParser 而言):

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Get a raw summary of the HTML-format document"""
import re
def get_summary(text, count, suffix=u'', wrapper=u'p'):
  """A simpler implementation (vs `SummaryHTMLParser`).
    >>> text = u'<p>Hi guys:</p><p>This is a example using SummaryHTMLParser.</p>'
    >>> get_summary(text, 10, u'...')
    u'<p>Higuys:Thi...</p>'
  """
  assert(isinstance(text, unicode))
  summary = re.sub(r'<.*?>', u'', text) # key difference: use regex
  summary = u''.join(summary.split())[0:count]
  return u'<{0}>{1}{2}</{0}>'.format(wrapper, summary, suffix)
if __name__ == '__main__':
  import doctest
  doctest.testmod()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python模块学习 datetime介绍
Aug 27 Python
Python正则表达式匹配中文用法示例
Jan 17 Python
Python3实现发送QQ邮件功能(html)
Dec 15 Python
Python+matplotlib实现计算两个信号的交叉谱密度实例
Jan 08 Python
Python数据结构之哈夫曼树定义与使用方法示例
Apr 22 Python
使用python将图片格式转换为ico格式的示例
Oct 22 Python
Python实现的旋转数组功能算法示例
Feb 23 Python
python实现弹跳小球
May 13 Python
详解Django3中直接添加Websockets方式
Feb 12 Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 Python
Python中SQLite如何使用
May 27 Python
python装饰器实现对异常代码出现进行自动监控的实现方法
Sep 15 Python
python中map、any、all函数用法分析
Apr 21 #Python
用于统计项目中代码总行数的Python脚本分享
Apr 21 #Python
Python中实现参数类型检查的简单方法
Apr 21 #Python
python实现的jpg格式图片修复代码
Apr 21 #Python
在Python的Flask框架中使用日期和时间的教程
Apr 21 #Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 #Python
在Python的Flask框架中实现全文搜索功能
Apr 20 #Python
You might like
全国FM电台频率大全 - 17 湖北省
2020/03/11 无线电
?繁体转换的class
2006/10/09 PHP
php算开始时间到过期时间的相隔的天数
2011/01/12 PHP
如何使用FireFox插件FirePHP调试PHP
2013/07/23 PHP
在html文件中也可以执行php语句的方法
2015/04/09 PHP
Laravel模型间关系设置分表的方法示例
2018/04/21 PHP
PHP7 字符串处理机制修改
2021/03/09 PHP
PJ Blog修改-禁止复制的代码和方法
2006/10/25 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
jquery索引在使用中的一些困惑
2013/10/24 Javascript
Get中文乱码IE浏览器Get中文乱码解决方案
2013/12/26 Javascript
js保留小数点后几位的写法
2014/01/03 Javascript
Js保留小数点的4种效果实现代码分享
2014/04/12 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
jQuery  ready方法实现原理详解
2016/10/19 Javascript
信息滚动效果的实例讲解
2017/09/18 Javascript
dropload.js插件下拉刷新和上拉加载使用详解
2017/10/20 Javascript
详述 Sublime Text 打开 GBK 格式中文乱码的解决方法
2017/10/26 Javascript
nodejs操作mongodb的增删改查功能实例
2017/11/09 NodeJs
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
H5+css3+js搭建带验证码的登录页面
2020/10/11 Javascript
Python编程求质数实例代码
2018/01/31 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
Django之使用内置函数和celery发邮件的方法示例
2019/09/16 Python
python搜索算法原理及实例讲解
2020/11/18 Python
Python偏函数实现原理及应用
2020/11/20 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
Allsole美国/加拿大:英国一家专门出售品牌鞋子的网站
2018/10/21 全球购物
英国女性时尚品牌:Apricot
2018/12/04 全球购物
创建卫生先进单位实施方案
2014/03/10 职场文书
2015年少先队活动总结
2015/03/25 职场文书
三八节活动主持词
2015/07/04 职场文书
Nginx访问日志及错误日志参数说明
2021/03/31 Servers
python和anaconda的区别
2022/05/06 Python