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 ORM框架SQLAlchemy学习笔记之数据查询实例
Jun 10 Python
Python实现删除文件但保留指定文件
Jun 21 Python
python 安装virtualenv和virtualenvwrapper的方法
Jan 13 Python
python 字典修改键(key)的几种方法
Aug 10 Python
python write无法写入文件的解决方法
Jan 23 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
Python操作MySQL数据库实例详解【安装、连接、增删改查等】
Jan 17 Python
利用setuptools打包python程序的方法步骤
Jan 18 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
python中列表的含义及用法
May 26 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
windows+vscode安装paddleOCR运行环境的步骤
Nov 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
PHP使用Mysql事务实例解析
2014/09/08 PHP
PHP保留两位小数的几种方法
2019/07/24 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
JavaScript库 开发规则
2009/01/31 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
JavaScript 获取任一float型小数点后两位的小数
2014/06/30 Javascript
Jquery解析Json格式数据过程代码
2014/10/17 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
jquery实现动态操作select选中
2015/02/11 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
深入解析ES6中的promise
2018/11/08 Javascript
element-plus一个vue3.xUI框架(element-ui的3.x 版初体验)
2020/12/02 Vue.js
Python爬虫天气预报实例详解(小白入门)
2018/01/24 Python
Python多重继承的方法解析执行顺序实例分析
2018/05/26 Python
tensorflow 获取变量&amp;打印权值的实例讲解
2018/06/14 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
Django 中间键和上下文处理器的使用
2019/03/17 Python
浅谈PyQt5 的帮助文档查找方法,可以查看每个类的方法
2019/06/25 Python
Python制作简易版小工具之计算天数的实现思路
2020/02/13 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
英国在线药房:Express Chemist
2019/03/28 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
员工保密承诺书
2014/05/28 职场文书
普通党员对照检查材料
2014/08/28 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
刑事起诉书范文
2015/05/19 职场文书
2015年政府采购工作总结
2015/05/21 职场文书