关于文档检索03

通过词频,对文章进行自动摘要(Automatic summarization)

摘要呢分为人工摘要和自动摘要。自动摘要呢,就是要找到那些包含信息最多的句子。有些句子包含信息多,有些句子包含信息少,自动摘要就是要找到那些包含信息最多的句子。

句子信息用关键词来衡量。如果包含的关键词越多,就说明这个句子越重要。有一个概念呢,就是用簇cluster表示关键词的聚集。所谓的簇就是包含多个关键词的句子片段。

当然了,我们称被框起来的部分是一个簇,只要管家此的距离小于门槛值,他们就被认为处于同一个簇之中,专家的建议门槛是4或5.也就是说两个关键词之间有5个以上的其他词,就可以把两个关键词分在两个簇。

在对每一个簇,都计算他的重要性分值

img

下以这个图为例有

img

其中的簇一共有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

伪代码中貌似没有考虑句子重复的问题。

原文地址:https://www.cnblogs.com/xiaofeisnote/p/13449486.html