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编写基于DHT协议的BT资源爬虫
Mar 19 Python
django实现登录时候输入密码错误5次锁定用户十分钟
Nov 05 Python
Python实现获取本地及远程图片大小的方法示例
Jul 21 Python
python scipy求解非线性方程的方法(fsolve/root)
Nov 12 Python
Python3安装pip工具的详细步骤
Oct 14 Python
python flask中动态URL规则详解
Nov 22 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
Python实现aes加密解密多种方法解析
May 15 Python
基于keras中的回调函数用法说明
Jun 17 Python
Python实现LR1文法的完整实例代码
Oct 25 Python
Python self用法详解
Nov 28 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 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面向对象全攻略 (九)访问类型
2009/09/30 PHP
php curl选项列表(超详细)
2013/07/01 PHP
php几个预定义变量$_SERVER用法小结
2014/11/07 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
javascript String 的扩展方法集合
2008/06/01 Javascript
初学Javascript的一些总结
2008/11/03 Javascript
js setTimeout opener的用法示例详解
2013/10/23 Javascript
jQuery提示插件alertify使用指南
2015/04/21 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
js 函数式编程学习笔记
2017/03/25 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
JS一个简单的注册页面实例
2017/09/05 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
NodeJS简单实现WebSocket功能示例
2018/02/10 NodeJs
Vue实现动态创建和删除数据的方法
2018/03/17 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
使用python3.5仿微软记事本notepad
2016/06/15 Python
python 删除大文件中的某一行(最有效率的方法)
2017/08/19 Python
python+matplotlib实现鼠标移动三角形高亮及索引显示
2018/01/15 Python
python使用pandas处理大数据节省内存技巧(推荐)
2019/05/05 Python
python中plt.imshow与cv2.imshow显示颜色问题
2020/07/16 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
Turnbull & Asser官网:英国皇室御用的顶级定制衬衫
2019/01/31 全球购物
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
介绍Java的内部类
2012/10/27 面试题
专业幼师实习生自我鉴定范文
2013/12/08 职场文书
会计工作心得体会
2014/01/13 职场文书
圣诞节开幕词
2015/01/29 职场文书
永不妥协观后感
2015/06/10 职场文书
详解如何修改nginx的默认端口
2021/03/31 Servers
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
Vue+Flask实现图片传输功能
2022/04/01 Vue.js
Android Flutter实现3D动画效果示例详解
2022/04/07 Java/Android
Python中time标准库的使用教程
2022/04/13 Python
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技