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中使用第三方库xlrd来读取Excel示例
Apr 05 Python
Python松散正则表达式用法分析
Apr 29 Python
python通过百度地图API获取某地址的经纬度详解
Jan 28 Python
Python 绘图库 Matplotlib 入门教程
Apr 19 Python
python查看列的唯一值方法
Jul 17 Python
Django组件cookie与session的具体使用
Jun 05 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 Python
python GUI库图形界面开发之PyQt5简单绘图板实例与代码分析
Mar 08 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
Python DES加密实现原理及实例解析
Jul 17 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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
php实现图片缩略图的方法
2016/03/29 PHP
Yii2实现中国省市区三级联动实例
2017/02/08 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
JavaScript 程序编码规范
2010/11/23 Javascript
getElementByIdx_x js自定义getElementById函数
2012/01/24 Javascript
使用jQuery动态加载js脚本文件的方法
2014/04/03 Javascript
提升PHP安全:8个必须修改的PHP默认配置
2014/11/17 Javascript
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
5种JavaScript脚本加载的方式
2017/01/16 Javascript
jQuery鼠标悬停内容动画切换效果
2017/04/27 jQuery
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
vue.js计算属性computed用法实例分析
2018/07/06 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
基于Koa2写个脚手架模拟接口服务的方法
2018/11/27 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
Vue v-for循环之@click点击事件获取元素示例
2019/11/09 Javascript
使用Nginx+uWsgi实现Python的Django框架站点动静分离
2016/03/21 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
2016/05/31 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
Python爬虫HTPP请求方法有哪些
2020/06/03 Python
巴西服装和鞋子购物网站:Marisa
2018/10/25 全球购物
Nº21官方在线商店:numeroventuno.com
2019/09/26 全球购物
食堂采购员岗位职责
2015/04/03 职场文书
2016寒假社会实践心得体会范文
2015/10/09 职场文书
社区服务理念口号
2015/12/25 职场文书
2016春季运动会开幕词
2016/03/04 职场文书
Golang 入门 之url 包
2022/05/04 Golang
CSS的calc函数用法小结
2022/06/25 HTML / CSS