原文: http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.html
有时候,很简单的数学方法,就可以完成很复杂的任务。
这个系列的前两部分就是很好的例子。仅仅依靠统计词频,就能找出关键词和相似文章。虽然它们算不上效果最好的方法,但肯定是最简便易行的方法。
今天,依然继续这个主题。讨论如何通过词频,对文章进行自动摘要(Automatic summarization)。
如果能从3000字的文章,提炼出150字的摘要,就可以为读者节省大量阅读时间。由人完成的摘要叫"人工摘要",由机器完成的就叫"自动摘要"。许多网站都需要它,比如论文网站、新闻网站、搜索引擎等等。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的这种算法后来被简化,不再区分"簇",只考虑句子包含的关键词。下面就是一个例子(采用伪码表示),只考虑关键词首先出现的句子。
Summarizer(originalText, maxSummarySize):
// 计算原始文本的词频,生成一个数组,比如[(10,'the'), (3,'language'), (8,'code')...]
wordFrequences = getWordCounts(originalText)// 过滤掉停用词,数组变成[(3, 'language'), (8, 'code')...]
contentWordFrequences = filtStopWords(wordFrequences)// 按照词频进行排序,数组变成['code', 'language'...]
contentWordsSortbyFreq = sortByFreqThenDropFreq(contentWordFrequences)// 将文章分成句子
sentences = getSentences(originalText)// 选择关键词首先出现的句子
setSummarySentences = {}
foreach word in contentWordsSortbyFreq:
firstMatchingSentence = search(sentences, word)
setSummarySentences.add(firstMatchingSentence)
if setSummarySentences.size() = maxSummarySize:
break// 将选中的句子按照出现顺序,组成摘要
summary = ""
foreach sentence in sentences:
if sentence in setSummarySentences:
summary = summary + " " + sentencereturn summary
类似的算法已经被写成了工具,比如基于Java的Classifier4J库的SimpleSummariser模块、基于C语言的OTS库、以及基于classifier4J的C#实现和python实现。
(完)
相关推荐
TF-IDF算法的优点是简单快速,结果比较符合实际情况
主要为大家详细介绍了TF-IDF与余弦相似性的应用,找出相似文章,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
TF-IDF与余弦相似性的应用(一):自动提取关键词 这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。 有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工...
Moviebox:基于内容的机器学习推荐系统利用tf-idf和余弦相似性算法
受第三方服务本身、网络、通讯协议等诸多因素影响,性能、吞吐率、可用性瓶颈比较严重,尤其在双十一等高峰期。 使用第三方GIS服务时的处理流程: 在地图上人工预先维护好片区划分,系统记录片区及其边界(多边形...
余弦相似性获取文章相似度的java实现,tf-idf算法实现
数据集:包含两个实现的数据集-> u.data,u.user(带有EM的GMM的数据集) -> ContentBased.txt(链接到与TF-IDF的余弦相似性的数据集) 演示文稿:包含Midsem和Endsem演示文稿的演示文稿文件。 -> Outliers_
基于统计的文本相似度量方法大多先采用TF-IDF方法将文本表示为词频向量,然后利用余弦计算文本之间的相似度。此类方法由于忽略文本中词项的语义信息,不能很好地反映文本之间的相似度。基于语义的方法虽然能够较好地...
则该词的tf-idf 为:n/N * 1/(m/M) (还有其它的归一化公式,这里是最基本最直观的公式)第四步:重复第三步,计算出一个网页所有词的tf-idf 值。第五步:重复第四步,计算出所有网页每个词的tf-idf 值。3、处理...
Facebook、Twitter和LinkedIn产生了大量宝贵的社交数据,但是你怎样...•应用诸如TF-IDF、余弦相似性、搭配分析、文档摘要、派系检测之类的先进挖掘技术 •通过基于HTML5和JavaScript工具包的网络技术建立交互式可视化
TF-IDF和余弦相似度是一种非常普遍的技术。 它允许系统快速检索类似于搜索查询的文档。 同样,基于相同的概念,而不是检索类似于查询的文档,它会检查查询与现有数据库文件的相似程度。 脚步: 用户输入查询 查询...
Facebook、Twitter和LinkedIn产生了大量宝贵的社交数据,但是你... •应用诸如TF-IDF、余弦相似性、搭配分析、文档摘要、派系检测之类的先进挖掘技术, •通过基于HTML5和JavaScript工具包的网络技术建立交互式可视化
相似性匹配系统 这个是一个《电商标题数据相似度匹配系统》,使用方法有:tfidf +词袋模型,余弦相似度,word2vec 1.基本方法 1.1结巴分词 1.2 TF-IDF 1.3余弦相似度 1.4 word2vec 2.项目:《电商标题数据相似度...
为了进一步改进个性化搜索方法,通过对现有个性化搜索方法的研究,提出了一种新的搜索方法...设计了基于余弦相似性计算并综合匹配的标签个数的资源相关性计算方法。通过MovieLens数据集实验,验证了提出方法的有效性。
相似性 该项目使用稀疏矩阵提供了几种KNN(K最近邻)相似性算法的快速Python实现,这在协作过滤推荐系统等中很有用。 该软件包还包括一些归一化功能,这些功能可能在相似度计算之前的预处理阶段有用。 相似之处 ...
在此基础上,利用余弦相似性、Jaccard相似性和改进的余弦相似性公式,计算工人间融合兴趣和能力的综合相似度,依此来选取近邻集并最终生成推荐.利用猪八戒网采集的数据进行实验,结果表明该方法的有效性,并通过对比...
目的是展示如何通过提取诸如TF.IDF和嵌入之类的特征来准备基于文本的数据集,以建立机器学习模型:除了使用提取的特征来提取文档分类(受监管)和文档聚类(不受监管)之外,执行文本(余弦)相似性分析。...