zoukankan      html  css  js  c++  java
  • 关于文档检索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
    

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

  • 相关阅读:
    原创 C++应用程序在Windows下的编译、链接(四)动态链接
    IE浏览器 json异常
    Linux系统github使用
    Mysql in 排序
    转 php四种基础算法:冒泡,选择,插入和快速排序法
    转 mysql取今天,明天,工作日,周末,本周,下周,下月数据
    下载远程图片到本地
    转 PHP中SQL_CALC_FOUND_ROWS与FOUND_ROWS()和count()
    星级点评
    21个值得收藏的Javascript技巧
  • 原文地址:https://www.cnblogs.com/xiaofeisnote/p/13449486.html
Copyright © 2011-2022 走看看