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中使用mysql数据库详细介绍
Mar 27 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
django admin添加数据自动记录user到表中的实现方法
Jan 05 Python
Python实现的txt文件去重功能示例
Jul 07 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
Python实现读取txt文件中的数据并绘制出图形操作示例
Feb 26 Python
Ubuntu+python将nii图像保存成png格式
Jul 18 Python
python3 自动打印出最新版本执行的mysql2redis实例
Apr 09 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
Python tkinter之Bind(绑定事件)的使用示例
Feb 05 Python
Python实现日志实时监测的示例详解
Apr 06 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学习之运算符相关概念
2011/06/09 PHP
HR vs ForZe BO3 第一场 2.13
2021/03/10 DOTA
JQuery each()函数如何优化循环DOM结构的性能
2012/12/10 Javascript
页面元素绑定jquery toggle后元素隐藏的解决方法
2014/03/27 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
javascript输出AscII码扩展集中的字符方法
2016/12/26 Javascript
bootstrap模态框远程示例代码分享
2017/05/22 Javascript
vue单页开发父子组件传值思路详解
2018/05/18 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
详解jQuery-each()方法
2019/03/13 jQuery
Openlayers实现测量功能
2020/09/25 Javascript
python 文件与目录操作
2008/12/24 Python
Python入门篇之文件
2014/10/20 Python
详细解析Python中__init__()方法的高级应用
2015/05/11 Python
利用Python-iGraph如何绘制贴吧/微博的好友关系图详解
2017/11/02 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
设置python3为默认python的方法
2018/10/31 Python
python面向对象法实现图书管理系统
2019/04/19 Python
Python高级特性 切片 迭代解析
2019/08/23 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
python为什么会环境变量设置不成功
2020/06/23 Python
使用html5新特性轻松监听任何App自带返回键的示例
2018/03/13 HTML / CSS
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
幼儿如何来做好自我评价
2013/11/05 职场文书
体育老师的教学自我评价分享
2013/11/19 职场文书
幼儿园运动会口号
2014/06/07 职场文书
诚信考试标语
2014/06/24 职场文书
2014坚持党风廉政建设思想汇报
2014/09/18 职场文书
个人遵守党的政治纪律情况对照检查材料思想汇报
2014/09/25 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
欢迎新生标语
2014/10/06 职场文书
农村文化建设标语
2014/10/07 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
Redis如何一键部署脚本
2021/04/12 Redis