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检测手机QQ在线状态的脚本代码
Feb 10 Python
Python三元运算实现方法
Jan 12 Python
python中字典dict常用操作方法实例总结
Apr 04 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
Aug 05 Python
python中的内置函数max()和min()及mas()函数的高级用法
Mar 29 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
python3模块smtplib实现发送邮件功能
May 22 Python
Python(TensorFlow框架)实现手写数字识别系统的方法
May 29 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
基于python 凸包问题的解决
Apr 16 Python
如何用python 操作zookeeper
Dec 28 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新手用的Insert和Update语句构造类
2012/03/31 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
Zend Framework入门教程之Zend_Session会话操作详解
2016/12/08 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
JQuery将文本转化成JSON对象需要注意的问题
2011/05/09 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
javascript 动态创建表格的2种方法总结
2015/03/04 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
Vue中父子组件通讯之todolist组件功能开发
2018/05/21 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
node后端服务保活的实现
2019/11/10 Javascript
vue自定义标签和单页面多路由的实现代码
2020/05/03 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
python线程锁(thread)学习示例
2013/12/04 Python
python sort、sorted高级排序技巧
2014/11/21 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
pygame实现俄罗斯方块游戏(基础篇1)
2019/10/29 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
FOREO斐珞尔官方旗舰店:LUNA露娜洁面仪
2018/03/11 全球购物
文明礼仪事迹材料
2014/01/09 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
乡镇党委书记第三阶段个人整改措施
2014/09/16 职场文书
党的群众路线教育实践活动个人对照检查材料(教师)
2014/11/04 职场文书
财务负责人岗位职责
2015/02/03 职场文书
2015学校图书管理员工作总结
2015/05/11 职场文书
2015初中政治教学工作总结
2015/07/21 职场文书
应届生个人的求职(自荐信范文2篇)
2019/08/23 职场文书
maven依赖的version声明控制方式
2022/01/18 Java/Android
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL