18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 网络营销 > 如何利用词频统计原理自动提取文章摘要?

如何利用词频统计原理自动提取文章摘要?

时间:2022-05-28 22:30:02 | 来源:网络营销

时间:2022-05-28 22:30:02 来源:网络营销

我一直觉得要想做好SEO,要做大一个网站,需要的不光是我们的坚持,也更需要一个正确的SEO技术,一个可行的SEO方法,一个合理的SEO策略,这也就是我一直提倡是SEO思维。虽说搜索引擎有着自己很复杂的算法,可有的时候,一个很简单的数学方法,就可以完成很复杂的任务。比如前面我在亿企邦上跟大家分享的依靠统计词频和余弦相似性,就能找出文章的关键词和判定相似文章。虽然它们在效果方面算不上最好的方法,但肯定是最简便易行的方法。

由于前面的两篇文章受到各位博友的好评,所以今天我要在亿企邦上跟大家分享的依然是这个主题。那就是讨论如何通过词频统计分析,对文章进行提取自动摘要(Automatic summarization)?


(图1)

如果我们能从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)表示关键词的聚集。所谓“簇”就是包含多个关键词的句子片段。


(图2)

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

下一步,对于每个簇,就需要计算它的重要性分值,如下图3所示:


(图3)

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

然后,找出包含分值最高的簇的句子(比如5句),把它们合在一起,就构成了这篇文章的自动摘要。

后来,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 + " " + sentence

return summary

其实,如上面类似的算法也早已被广泛使用了,有的也已经被写成了工具,比如基于Java的Classifier4J库的SimpleSummariser模块、基于C语言的OTS库、以及基于classifier4J的C#实现和python实现。

关键词:提取,文章,原理

74
73
25
news

版权所有© 亿企邦 1997-2022 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭