代码之家  ›  专栏  ›  技术社区  ›  SingleNegationElimination

计算文章摘要

  •  5
  • SingleNegationElimination  · 技术社区  · 15 年前

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

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

    只需抓住前几行值得的文本,但我对结果并不完全满意。

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

    有没有一个图书馆擅长这种东西?如果没有,您有什么改进输出的建议吗?

    2 回复  |  直到 15 年前
        1
  •  7
  •   Nadia Alramli    15 年前

    编辑:

    你可以这样做:

    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] + '...'
    

    这就利用了文本环绕算法来获得理想的文本长度。它将把文本分割成屏幕大小的行,并使用它们来计算所需行数的长度。

    例如,将此算法应用于 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]
    

    这还将用空格替换换行符,而换行符可能会根据您的需求而有所需要。

        2
  •  0
  •   Jean Regisser    15 年前

    我不太确定你想要什么。

    不过,我建议把文章剪成x个字符,并加上“…”。然后,您可以更好地控制“抽象”的大小(如果这正是当前实现中困扰您的地方)。