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实现多进程异步事件驱动引擎
Aug 25 Python
Python实现句子翻译功能
Nov 14 Python
django请求返回不同的类型图片json,xml,html的实例
May 22 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
Python人工智能之路 之PyAudio 实现录音 自动化交互实现问答
Aug 13 Python
Python中函数的返回值示例浅析
Aug 28 Python
Python生成个性签名图片获取GUI过程解析
Dec 16 Python
解决keras加入lambda层时shape的问题
Jun 11 Python
Python 如何创建一个简单的REST接口
Jul 30 Python
python闭包与引用以及需要注意的陷阱
Sep 18 Python
pycharm 使用anaconda为默认环境的操作
Feb 05 Python
python自动化之如何利用allure生成测试报告
May 02 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知识收集
2012/08/20 PHP
使用HMAC-SHA1签名方法详解
2013/06/26 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
javascript new 需不需要继续使用
2009/07/02 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
使用mini-define实现前端代码的模块化管理
2014/12/25 Javascript
Augularjs-起步详解
2016/07/08 Javascript
原生js更改css样式的两种方式
2017/03/15 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
基于AngularJS的简单使用详解
2017/09/10 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
让bootstrap的carousel支持滑动滚屏的实现代码
2017/11/27 Javascript
echarts设置图例颜色和地图底色的方法实例
2018/08/01 Javascript
vue图片裁剪插件vue-cropper使用方法详解
2020/12/16 Vue.js
详解vite2.0配置学习(typescript版本)
2021/02/25 Javascript
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
python自动裁剪图像代码分享
2017/11/25 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
python基础梳理(一)(推荐)
2019/04/06 Python
六行python代码的爱心曲线详解
2019/05/17 Python
基于Django统计博客文章阅读量
2019/10/29 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
详解Canvas 跨域脱坑实践
2018/11/07 HTML / CSS
信号量和自旋锁的区别?如何选择使用?
2015/09/08 面试题
股权转让意向书
2014/04/01 职场文书
咖啡店创业计划书范文
2014/09/15 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
农村党支部承诺书
2015/04/30 职场文书
运动会运动员赞词
2015/07/22 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书