python文本摘要_Python实现提取文章摘要的方法

#!/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文档 中包含大量标记符(如

在遵循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'

Hi guys:

This is a example using SummaryHTMLParser.'

>>> parser = SummaryHTMLParser(10)

>>> parser.feed(text)

>>> parser.get_summary(u'...')

u'

Higuys:Thi...'

"""

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'{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'

Hi guys:

This is a example using SummaryHTMLParser.'

>>> get_summary(text, 10, u'...')

u'

Higuys:Thi...'

"""

assert(isinstance(text, unicode))

summary = re.sub(r'', u'', text) # key difference: use regex

summary = u''.join(summary.split())[0:count]

return u'{1}{2}{0}>'.format(wrapper, summary, suffix)

if __name__ == '__main__':

import doctest

doctest.testmod()

希望本文所述对大家的Python程序设计有所帮助。

article_wechat2021.jpg?1111

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

相关文章

相关视频

网友评论

文明上网理性发言,请遵守 新闻评论服务协议我要评论

user_avatar.jpg

立即提交

专题推荐5d1ef1e9e866e635.jpg独孤九贱-php全栈开发教程

全栈 100W+

主讲:Peter-Zhu 轻松幽默、简短易学,非常适合PHP学习入门

5d1ef236ca878949.jpg玉女心经-web前端开发教程

入门 50W+

主讲:灭绝师太 由浅入深、明快简洁,非常适合前端学习入门

5d1ef2477c7d7587.jpg天龙八部-实战开发教程

实战 80W+

主讲:西门大官人 思路清晰、严谨规范,适合有一定web编程基础学习

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值