首页 存档 技术 查看内容

使用Python自动提取内容摘要

2018-3-30 13:00 |来自: 互联网 1279 0

摘要: 来源:https://www.biaodianfu.com/automatic-text-summarizer.html 文 | 标点符 利用计算机将大量的文本进行处理,产生简洁、精炼内容的过程就是文本摘要,人们可通过阅读摘要来把握文本主要内容,这不仅大大节省时 ...

来源:https://www.biaodianfu.com/automatic-text-summarizer.html

文 | 标点符

利用计算机将大量的文本进行处理,产生简洁、精炼内容的过程就是文本摘要,人们可通过阅读摘要来把握文本主要内容,这不仅大大节省时间,更提高阅读效率。但人工摘要耗时又耗力,已不能满足日益增长的信息需求,因此借助计算机进行文本处理的自动文摘应运而生。近年来,自动摘要、信息检索、信息过滤、机器识别、等研究已成为了人们关注的热点。

自动摘要(Automatic Summarization)的方法主要有两种:Extraction 和 Abstraction。其中 Extraction 是抽取式自动文摘方法,通过提取文档中已存在的关键词,句子形成摘要;Abstraction 是生成式自动文摘方法,通过建立抽象的语意表示,使用自然语言生成技术,形成摘要。由于自动摘要方法需要复杂的自然语言理解和生成技术支持,应用领域受限。,抽取式摘要成为现阶段主流,它也能在很大程度上满足人们对摘要的需求。

目前抽取式的主要方法:

  • 基于统计:统计词频,位置等信息,计算句子权值,再简选取权值高的句子作为文摘,特点:简单易用,但对词句的使用大多仅停留在表面信息。

  • 基于图模型:构建拓扑结构图,对词句进行排序。例如,TextRank/LexRank

  • 基于潜在语义:使用主题模型,挖掘词句隐藏信息。例如,采用 LDA,HMM

  • 基于线路规划:将摘要问题转为线路规划,求全局最优解。

2007 年,美国学者的论文《A Survey on Automatic Text Summarization》(Dipanjan Das, Andre F.T. Martins, 2007)总结了目前的自动摘要算法。其中,很重要的一种就是词频统计。这种方法最早出自 1958 年的 IBM 公司科学家H.P. Luhn 的论文《The Automatic Creation of Literature Abstracts》。

Luhn 博士认为,文章的信息都包含在句子中,有些句子包含的信息多,有些句子包含的信息少。"自动摘要"就是要找出那些包含信息最多的句子。句子的信息量用"关键词"来衡量。如果包含的关键词越多,就说明这个句子越重要。Luhn 提出用"簇"(cluster)表示关键词的聚集。所谓"簇"就是包含多个关键词的句子片段。

上图就是 Luhn 原始论文的插图,被框起来的部分就是一个"簇"。只要关键词之间的距离小于"门槛值",它们就被认为处于同一个簇之中。Luhn 建议的门槛值是 4 或 5。也就是说,如果两个关键词之间有 5 个以上的其他词,就可以把这两个关键词分在两个簇。下一步,对于每个簇,都计算它的重要性分值。

以上图为例,其中的簇一共有 7 个词,其中 4 个是关键词。因此,它的重要性分值等于 ( 4 x 4 ) / 7 = 2.3。

然后,找出包含分值最高的簇的句子(比如 5 句),把它们合在一起,就构成了这篇文章的自动摘要。具体实现可以参见《Mining the Social Web: Analyzing Data from Facebook, Twitter, LinkedIn, and Other Social Media Sites》(O'Reilly, 2011)一书的第 8 章,python 代码见github。

Luhn 的这种算法后来被简化,不再区分"簇",只考虑句子包含的关键词。下面就是一个例子(采用伪码表示),只考虑关键词首先出现的句子。

类似的算法已经被写成了工具,比如基于 Java 的Classifier4J库的**Summariser模块、基于 C 语言的OTS库、以及基于 classifier4J 的C#实现和python 实现。

参考文章:

  • http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.html

  • http://joshbohde.com/blog/document-summarization

TextTeaser

TextTeaser原本是为在线长文章(所谓 tl;dr:too long; didn't read)自动生成摘要的服务,其原本的收费标准是每摘要 1000 篇文章付费 12 美元或每月 250 美元。巴尔宾称 TextTeaser 可以为任何使用罗马字母的文本进行摘要,而且比同类工具如 Cruxbot 和 Summly(在 2013 年 3 月被 雅虎斥资 3000 万美元收购)更准确。其创造者霍洛巴尔宾(Jolo Balbin)表示,在"发现一些扩展问题,特别是 API 中的问题后",他决定将 TextTeaser 代码开源。

TextTeaser 开源的代码一共有三个 class,TextTeaser,Parser,Summarizer。

  • TextTeaser,程序入口类。给定待摘要的文本和文本题目,输出文本摘要,默认是原文中最重要的 5 句话。

  • Summarizer,生成摘要类。计算出每句话的分数,并按照得分做排序,然后按照原文中句子的顺序依次输出得分最高的 5 句话作为摘要。

  • Parser,文本解析类。对文本进行去除停用词、去除标点符号、分词、统计词频等一些预处理操作。

其中打分模型分为四部分:

  • 句子长度,长度为 20 的句子为最理想的长度,依照距离这个长度来打分。

  • 句子位置,根据句子在全文中的位置,给出分数。(巴尔宾认为一篇文章的第二句比第一句更重要,因为很多作家都习惯到第二句话引入关键点)备注:用段落效果会怎样?

  • 文章标题与文章内容的关系,句子是否包含标题词,根据句子中包含标题词的多少来打分。

  • 句子关键词打分,文本进行预处理之后,按照词频统计出排名前 10 的关键词,通过比较句子中包含关键词的情况,以及关键词分布的情况来打分(sbs,dbs 两个函数)。

开源版本:

  • Scala 版本:https://github.com/MojoJolo/textteaser

  • Python 版本:https://github.com/DataTeaser/textteaser

自己尝试这个调用 Python 版本。主要:不要使用 pip install textteaser 进行安装,该安装方式安装的是这个项目:

https://github.com/jgoettsch/py-textteaser,该项目并非算法实现,而是 API 实现。直接下载代码即可:https://github.com/DataTeaser/textteaser

下载完成后在 Windows 下运营 test.py 会报错,报错信息如下:

  1. Traceback (most recent call last):

  2. File "D:/textteaser/test.py", line 12, in

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部