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 相关文章推荐
浅谈django中的认证与登录
Oct 31 Python
django rest framework之请求与响应(详解)
Nov 06 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
Dec 14 Python
python调用百度语音识别实现大音频文件语音识别功能
Aug 30 Python
virtualenv 指定 python 解释器的版本方法
Oct 25 Python
Python实现平行坐标图的两种方法小结
Jul 04 Python
对django中foreignkey的简单使用详解
Jul 28 Python
python 采用paramiko 远程执行命令及报错解决
Oct 21 Python
Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析
Mar 30 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
Python如何对齐字符串
Jul 30 Python
python装饰器代码解析
Mar 23 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中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
Laravel5.* 打印出执行的sql语句的方法
2017/07/24 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
js实现身份证号码验证的简单实例
2014/02/19 Javascript
node.js中的fs.fsync方法使用说明
2014/12/15 Javascript
基于JavaScript实现瀑布流布局(二)
2016/01/26 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
简单谈谈JS中的正则表达式
2017/09/11 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
微信小程序使用gitee进行版本管理
2018/09/20 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
python使用PyV8执行javascript代码示例分享
2013/12/04 Python
实例讲解Python中的私有属性
2014/08/21 Python
python求众数问题实例
2014/09/26 Python
用python写扫雷游戏实例代码分享
2018/05/27 Python
Pandas的read_csv函数参数分析详解
2019/07/02 Python
解决python 文本过滤和清理问题
2019/08/28 Python
python 三元运算符使用解析
2019/09/16 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
Python txt文件常用读写操作代码实例
2020/08/03 Python
Python 实现一个简单的web服务器
2021/01/03 Python
S’well Bottle保温杯官网:绝缘不锈钢水瓶
2018/05/09 全球购物
英国在线汽车和面包车零件商店:Car Parts 4 Less
2018/08/15 全球购物
上课迟到检讨书100字
2014/01/11 职场文书
中青班党性分析材料
2014/02/16 职场文书
《鸟的天堂》教学反思
2014/02/27 职场文书
民政局离婚协议书范本
2014/10/20 职场文书
自主招生自荐信格式范文
2015/03/25 职场文书
污染环境建议书
2015/09/14 职场文书
大学优秀学生主要事迹材料
2015/11/04 职场文书
详细总结Python常见的安全问题
2021/05/21 Python