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的净值数据接口调用示例分享
Mar 15 Python
python语言使用技巧分享
May 31 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
使用celery执行Django串行异步任务的方法步骤
Jun 06 Python
python深copy和浅copy区别对比解析
Dec 26 Python
Python3批量创建Crowd用户并分配组
May 20 Python
什么是python的列表推导式
May 26 Python
Python新手学习标准库模块命名
May 29 Python
Python学习之路安装pycharm的教程详解
Jun 17 Python
python绘制汉诺塔
Mar 01 Python
手把手教你使用TensorFlow2实现RNN
Jul 15 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性能测试工具xhprof安装与使用方法详解
2018/04/29 PHP
PHP使用标准库spl实现的观察者模式示例
2018/08/04 PHP
JQuery Easyui Tree的oncheck事件实现代码
2010/05/28 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
javascript倒计时功能实现代码
2012/06/07 Javascript
js日期时间补零的小例子
2013/03/05 Javascript
ExtJS下 Ext.Direct加载和提交过程排错小结
2013/04/02 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
JS中生成随机数的用法及相关函数
2016/01/09 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
Javascript的比较汇总
2016/07/25 Javascript
js显示动态时间的方法详解
2016/08/20 Javascript
JavaScript与ActionScript3两者的同性与差异性
2016/09/22 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
JS常用正则表达式总结【经典】
2017/05/12 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
Vue press 支持图片放大功能的实例代码
2018/11/09 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
基于js实现抽红包并分配代码实例
2019/09/19 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
js实现轮播图特效
2020/05/28 Javascript
vue如何搭建多页面多系统应用
2020/06/17 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
深入了解Vue动态组件和异步组件
2021/01/26 Vue.js
[06:37]2014DOTA2国际邀请赛 昔日王者渴望重回巅峰
2014/07/12 DOTA
Python实现豆瓣图片下载的方法
2015/05/25 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
Django实现跨域请求过程详解
2019/07/25 Python
numpy创建单位矩阵和对角矩阵的实例
2019/11/29 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
2014党的群众路线教育实践活动总结报告
2014/10/31 职场文书
68行Python代码实现带难度升级的贪吃蛇
2022/01/18 Python
java实现web实时消息推送的七种方案
2022/07/23 Java/Android