我正在寻找一种方法来自动生成一个抽象,基本上是博客条目的前几个部分/段落,以显示在文章列表中(以降价方式编写).目前,我正在做这样的事情:
def abstract(article, paras=3):
return '\n'.join(article.split('\n')[0:paras])
Run Code Online (Sandbox Code Playgroud)
只抓住前几行的文字,但我对结果并不满意.
我真正想要的是在条目列表中显示大约1/3的屏幕格式化文本,但是使用上面的算法,拉出的金额最终变化很大,就像一个一两行,经常与更理想的大小摘要混合.
有没有一个擅长这种事情的图书馆?如果没有,你有什么建议来提高产量吗?
编辑:
你可以这样做:
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] + '...'
Run Code Online (Sandbox Code Playgroud)
这使用textwrap算法来获得理想的文本长度.它会将文本分成屏幕大小的行,并使用它们来计算所需行数的长度.
例如,在python维基百科页面条目上应用此算法:
print getAbstract(text, lines=7)
Run Code Online (Sandbox Code Playgroud)
会给你这个输出:
Python是一种通用的高级编程语言.2其设计理念强调代码可读性.[3] Python声称"[结合]非凡的功能和非常清晰的语法",[4]并且其标准库是庞大而全面的.在流行的编程语言中,它使用缩进作为块分隔符是不常见的.
Python支持多种编程范例(主要面向对象,命令式和功能性),并具有完全动态类型系统和自动内存管理,类似于Perl,Ruby,Scheme和Tcl.与其他动态语言一样,Python通常用作脚本......
没有进一步的细节,很难帮助你.但如果您的问题是前几行对于某些条目来说太多了,您可能需要查看textwrap
例如,如果您只需要100个字符的摘要,则可以执行以下操作:
import textwrap
abstract = textwrap.wrap(text, 100)[0]
Run Code Online (Sandbox Code Playgroud)
这也将取代带有空格的换行符,这可能是您所需要的.