5

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

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

只抓取前几行文本,但我对结果并不完全满意。

我真正想要的是在条目列表中显示大约 1/3 的格式化文本屏幕,但是使用上面的算法,提取的数量最终会有很大的变化,只有一个一两行,经常与更理想大小的摘要混合在一起。

有没有擅长这种事情的图书馆?如果没有,您有什么建议可以改善输出吗?

4

2 回答 2

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 维基百科页面条目上应用这个算法:

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]

这也将根据您的要求将换行符替换为可能需要的空格。

于 2009-11-04T19:19:31.003 回答
0

我不确定你想要什么。

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

于 2009-11-04T19:18:46.537 回答