计算文章摘要

时间:2009-11-04 19:09:02

标签: python markdown

我正在寻找一种方法来自动生成一个摘要,基本上是博客条目的前几个序列/段落,以显示在文章列表中(以降价方式编写)。目前,我正在做这样的事情:

def abstract(article, paras=3):
    return '\n'.join(article.split('\n')[0:paras])

只是抓住前几行的文字,但我对结果并不完全满意。

我真正想要的是在条目列表中显示大约1/3的屏幕格式化文本,但是使用上面的算法,拉出的金额最终会变化很大,如很少作为一两行,经常与更理想的大小摘要混合。

有没有一个擅长这种事情的图书馆?如果没有,你有什么建议来改善输出吗?

2 个答案:

答案 0 :(得分:7)

修改

您可以这样做:

from textwrap import wrap

def getAbstract(text, lines=5, screenwidth=100):
    width = len(' '.join([
               line for block in text.splitlines()
               for line in wrap(block, width=screenwidth)
            ][:lines]))
    return text[:width] + '...'

这使用textwrap算法来获得理想的文本长度。它会将文本分成屏幕大小的行,并使用它们来计算所需行数的长度。

例如,在python wikipedia page条目上应用此算法:

print getAbstract(text, lines=7)

会给你这个输出:

  

Python是一个通用的高级别   编程语言。2它的设计   哲学强调代码   可读性。[3] Python声称   “[结合]非凡的力量   清晰的语法“,[4]及其标准   图书馆庞大而全面。   它使用缩进作为块   分隔符在流行之中是不寻常的   编程语言。

     

Python支持多种编程   范式(主要面向对象,   命令式的,功能性的和   具有完全动态的类型系统   和自动内存管理,   类似于Perl,Ruby,Scheme和   TCL。像其他动态语言一样   Python通常用作脚本......


没有进一步的细节,很难帮助你。但如果您的问题是前几行对于某些条目来说太多了,您可能需要查看textwrap

例如,如果您只需要100个字符的摘要,则可以执行以下操作:

import textwrap

abstract = textwrap.wrap(text, 100)[0]

这也将取代带有空格的换行符,这取决于您的要求。

答案 1 :(得分:0)

我不确定你想要什么。

但是,我建议在X字符之后剪切文章并放上“......”。然后你可以更好地控制“抽象”的大小(如果这是你当前实现中的困扰)。