我正在寻找一种方法来自动生成一个摘要,基本上是博客条目的前几个序列/段落,以显示在文章列表中(以降价方式编写)。目前,我正在做这样的事情:
def abstract(article, paras=3):
return '\n'.join(article.split('\n')[0:paras])
只是抓住前几行的文字,但我对结果并不完全满意。
我真正想要的是在条目列表中显示大约1/3的屏幕格式化文本,但是使用上面的算法,拉出的金额最终会变化很大,如很少作为一两行,经常与更理想的大小摘要混合。
有没有一个擅长这种事情的图书馆?如果没有,你有什么建议来改善输出吗?
答案 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字符之后剪切文章并放上“......”。然后你可以更好地控制“抽象”的大小(如果这是你当前实现中的困扰)。