Python实现提取文章摘要的方法

 更新时间:2015年04月21日 16:27:38   作者:RussellLuo  
这篇文章主要介绍了Python实现提取文章摘要的方法,实例分析了Python提取文章摘要的原理与实现技巧,需要的朋友可以参考下

本文实例讲述了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程序设计有所帮助。

相关文章

  • 对pandas数据判断是否为NaN值的方法详解

    对pandas数据判断是否为NaN值的方法详解

    今天小编就为大家分享一篇对pandas数据判断是否为NaN值的方法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Python画图小案例之小雪人超详细源码注释

    Python画图小案例之小雪人超详细源码注释

    在看了很多Python教程之后,觉得是时候做点什么小项目来练练手了,于是想来想去,用python写了一个小雪人,代码注释无比详细清楚,快来看看吧
    2021-09-09
  • 详解Python中dbm模块和shelve模块的使用

    详解Python中dbm模块和shelve模块的使用

    这篇文章主要为大家详细介绍了Python中dbm模块和shelve模块的具体用法,文中的示例代码简洁易懂,对我们深入学习Python有一定的帮助,需要的可以参考下
    2023-10-10
  • 使用Python设置、更改及移除Word文档密码

    使用Python设置、更改及移除Word文档密码

    给Word文档设置打开密码是常见的Word文档加密方式,如果我们需要对大量的Word文档进行加密、解密处理,Python是一个不错的选择,本文将介绍如何使用Python设置、更改或移除Word文档的加密,需要的朋友可以参考下
    2024-03-03
  • python正则表达式用法超详细讲解大全

    python正则表达式用法超详细讲解大全

    正则表达式是一种用来匹配字符串的强有力的武器,利用字符来匹配字符的思想,基于显示规则进行模式匹配,可以高效组合成不同样式的字符串,下面这篇文章主要给大家介绍了关于python正则表达式用法超详细讲解的相关资料,需要的朋友可以参考下
    2022-10-10
  • 使用matplotlib画图之坐标轴不等距

    使用matplotlib画图之坐标轴不等距

    这篇文章主要介绍了使用matplotlib画图之坐标轴不等距方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 如何利用Python监控别人的网站

    如何利用Python监控别人的网站

    这篇文章主要为大家详细介绍了如何利用Python实现监控别人的网站,这样还可以详细了解你的竞争对手网站,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-05-05
  • Pytorch实战之数据加载和处理详解

    Pytorch实战之数据加载和处理详解

    Pytorch提供了许多工具来简化和希望数据加载,使代码更具可读性,本文将通过一些简单示例为大家具体讲讲,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-06-06
  • 利用Pandas读取文件路径或文件名称包含中文的csv文件方法

    利用Pandas读取文件路径或文件名称包含中文的csv文件方法

    今天小编就为大家分享一篇利用Pandas读取文件路径或文件名称包含中文的csv文件方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python 词典(Dict) 加载与保存示例

    Python 词典(Dict) 加载与保存示例

    今天小编就为大家分享一篇Python 词典(Dict) 加载与保存示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12

最新评论