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的math模块中的常用数学函数整理
Feb 04 Python
Python实现新浪博客备份的方法
Apr 27 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
python 输出所有大小写字母的方法
Jan 02 Python
对python借助百度云API对评论进行观点抽取的方法详解
Feb 21 Python
Python实现最常见加密方式详解
Jul 13 Python
Django连接数据库并实现读写分离过程解析
Nov 13 Python
如何使用pycharm连接Databricks的步骤详解
Sep 23 Python
Django权限控制的使用
Jan 07 Python
Python词云的正确实现方法实例
May 08 Python
详解在OpenCV中如何使用图像像素
Mar 03 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
缅甸的咖啡简史
2021/03/04 咖啡文化
基于数据库的在线人数,日访问量等统计
2006/10/09 PHP
测试您的 PHP 水平的题目
2007/05/30 PHP
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
浅析PHP中Collection 类的设计
2013/06/21 PHP
js验证表单大全
2006/11/25 Javascript
理解JavaScript中的对象 推荐
2011/01/09 Javascript
Webkit的跨域安全问题说明
2011/09/13 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
2011/09/26 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
jquery马赛克拼接翻转效果代码分享
2015/08/24 Javascript
全面解析Bootstrap排版使用方法(标题)
2015/11/30 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
Nodejs实现的操作MongoDB数据库功能完整示例
2019/02/02 NodeJs
解决await在forEach中不起作用的问题
2021/02/25 Javascript
Python 文件读写操作实例详解
2014/03/12 Python
基于Python的身份证号码自动生成程序
2014/08/15 Python
跟老齐学Python之赋值,简单也不简单
2014/09/24 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
用Python配平化学方程式的方法
2019/07/20 Python
python实现mean-shift聚类算法
2020/06/10 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
如何清空python的变量
2020/07/05 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
初三政治教学反思
2014/01/30 职场文书
服装店营销方案
2014/03/10 职场文书
在职证明书范本(2014新版)
2014/09/25 职场文书
环卫工人慰问信
2015/02/15 职场文书
利用python做数据拟合详情
2021/11/17 Python