加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[转]TF-IDF与余弦相似性的应用

发布时间:2021-01-19 21:46:28 所属栏目:大数据 来源:网络整理
导读:TF-IDF与余弦相似性的应用(一):自动提取要害词 作者:?阮一峰 日期:?2013年3月15日 这个问题看上去仿佛很伟大,着实我要谈的是一个很简朴的题目。 有一篇很长的文章,我要用计较机提取它的要害词(Automatic Keyphrase extraction),完全不加以人工过问

TF-IDF与余弦相似性的应用(三):自动择要

2013年3月26日

偶然辰,很简朴的数学要领,就可以完成很伟大的使命。

这个系列的前两部门就是很好的例子。仅仅依赖统计词频,就能找出要害词和相似文章。固然它们算不上结果最好的要领,但必定是最轻盈易行的要领。

本日,依然继承这个主题。接头怎样通过词频,对文章举办自动择要(Automatic summarization)。

[转]TF-IDF与余弦相似性的应用

假如能从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)暗示要害词的聚积。所谓"簇"就是包括多个要害词的句子片断。

[转]TF-IDF与余弦相似性的应用

上图就是Luhn原始论文的插图,被框起来的部门就是一个"簇"。只要要害词之间的间隔小于"门槛值",它们就被以为处于统一个簇之中。Luhn提议的门槛值是4或5。也就是说,假如两个要害词之间有5个以上的其他词,就可以把这两个要害词分在两个簇。

下一步,对付每个簇,都计较它的重要性分值。

[转]TF-IDF与余弦相似性的应用

早年图为例,个中的簇一共有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,'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实现。

(完)



(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读