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实现进程间通信简单实例
Jul 23 Python
python获取Linux下文件版本信息、公司名和产品名的方法
Oct 05 Python
Python实现遍历数据库并获取key的值
May 17 Python
Python文件和流(实例讲解)
Sep 12 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
python按时间排序目录下的文件实现方法
Oct 17 Python
对python条件表达式的四种实现方法小结
Jan 30 Python
Python正则表达式急速入门(小结)
Dec 16 Python
python新式类和经典类的区别实例分析
Mar 23 Python
pycharm安装及如何导入numpy
Apr 03 Python
Pytorch环境搭建与基本语法
Jun 03 Python
Python WSGI 规范简介
Apr 11 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
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
一个基于phpQuery的php通用采集类分享
2014/04/09 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
laravel数据库查询结果自动转数组修改实例
2021/02/27 PHP
jquery改变disabled的boolean状态的三种方法
2013/12/13 Javascript
javascript操作css属性
2013/12/30 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
javascript检测是否联网的实现代码
2014/09/28 Javascript
jQuery仿Flash上下翻动的中英文导航菜单实例
2015/03/10 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
为输入框加入数字js校验代码分享
2017/11/02 Javascript
vue页面切换到滚动页面显示顶部的实例
2018/03/13 Javascript
微信小程序多音频播放进度条问题
2018/08/28 Javascript
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
python使用multiprocessing模块实现带回调函数的异步调用方法
2015/04/18 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
再谈Python中的字符串与字符编码(推荐)
2016/12/14 Python
浅析使用Python操作文件
2017/07/31 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
Python饼状图的绘制实例
2019/01/15 Python
pandas中DataFrame修改index、columns名的方法示例
2019/08/02 Python
详解Python中pyautogui库的最全使用方法
2020/04/01 Python
Django使用rest_framework写出API
2020/05/21 Python
Python爬虫与反爬虫大战
2020/07/30 Python
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
大学生简历的个人自我评价
2013/12/04 职场文书
工程造价专业大学生职业规划范文
2014/03/09 职场文书
税务干部群众路线教育实践活动对照检查材料
2014/09/20 职场文书
党员查摆四风问题思想汇报
2014/10/25 职场文书
银行自荐信范文
2015/03/25 职场文书
2015年生产车间工作总结
2015/04/22 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python