关于文本摘要的介绍网上有很多资料,大家可以搜一搜。本文主要是针对单文档文本摘要的抽取方法,使用java实现。主要方法是基于两篇文献:

1.

(这里引用阮一峰的博客介绍http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.html。)H.P. Luhn在1958年的论文《The Automatic Creation of Literature Abstracts》。

Luhn博士认为,文章的信息都包含在句子中,有些句子包含的信息多,有些句子包含的信息少。"自动摘要"就是要找出那些包含信息最多的句子。

句子的信息量用"关键词"来衡量。如果包含的关键词越多,就说明这个句子越重要。Luhn提出用"簇"(cluster)表示关键词的聚集。所谓"簇"就是包含多个关键词的句子片段。

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

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

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

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

2.

利用最大边缘相关模型(Maximal Marginal Relevance)提高返回句子的多样性。因为使用以上方法通常会得到一些太相似或太相近的句子,为了避免这种情况,结合MMR来增加内容的多样性。这种方法是权衡相关性和多样性。使得摘要内容更加的全面。MMR方法可以较好地解决句子选择多样性的问题。具体地说,在MMR模型中,同时将相关性和多样性进行衡量。因此,可以方便的调节相关性和多样性的权重来满足偏向“需要相似的内容”或者偏向“需要不同方面的内容”的要求。摘要的核心便是要从原文句子中选一个句子集合,使得该集合在相关性与多样性的评测标准下,得分最高。具体的资料介绍可以看https://github.com/jiangnanboy/NewsSummary有一篇英文介绍。

Di: Documents in the collection C
Q: Query,
R: Relevant documents in C,
S: Current result set

- Constructs the result set incrementally
- User-tunable diversity through λ parameter
- High λ = Higher accuracy
- Low λ = Higher diversity

以上公式中是针对搜索引擎中的查询与文档的关系,这里我们稍作改变:

 max[λ*score(i) - (1-λ)*max[similarity(i,j)]]:score(i)根据1中计算句子的得分,similarity(i,j)句子i与j的相似度

MMR程序java程序(完整程序https://github.com/jiangnanboy/NewsSummary)

 1 /**
 2  * 最大边缘相关(Maximal Marginal Relevance),根据λ调节准确性和多样性
 3  * max[λ*score(i) - (1-λ)*max[similarity(i,j)]]:score(i)句子的得分,similarity(i,j)句子i与j的相似度
 4  * User-tunable diversity through λ parameter
 5  * - High λ= Higher accuracy
 6  * - Low λ= Higher diversity
 7  * @param sortedSentList 排好序的句子,编号及得分
 8  * @return
 9  */
10 private Map<Integer,Double> MMR(List<Map.Entry<Integer, Double>> sortedSentList){
11     //System.out.println("MMR In...");
12     double[][] simSentArray=sentJSimilarity();//所有句子的相似度
13     Map<Integer,Double> sortedLinkedSent=new LinkedHashMap<Integer,Double>();
14     for(Map.Entry<Integer, Double> entry:sortedSentList){
15         sortedLinkedSent.put(entry.getKey(),entry.getValue());
16     }
17     Map<Integer,Double> MMR_SentScore=new LinkedHashMap<Integer,Double>();//最终的得分(句子编号与得分)
18     Map.Entry<Integer, Double> Entry=sortedSentList.get(0);//第一步先将最高分的句子加入
19     MMR_SentScore.put(Entry.getKey(), Entry.getValue());
20     boolean flag=true;
21     while(flag){
22         int index=0;
23         double maxScore=Double.NEGATIVE_INFINITY;//通过迭代计算获得最高分句子
24         for(Map.Entry<Integer, Double> entry:sortedLinkedSent.entrySet()){
25             if(MMR_SentScore.containsKey(entry.getKey())) continue;
26             double simSentence=0.0;
27             for(Map.Entry<Integer, Double> MMREntry:MMR_SentScore.entrySet()){//这个是获得最相似的那个句子的最大相似值
28                 double simSen=0.0;
29                 if(entry.getKey()>MMREntry.getKey())
30                     simSen=simSentArray[MMREntry.getKey()][entry.getKey()];
31                 else
32                     simSen=simSentArray[entry.getKey()][MMREntry.getKey()];
33                 if(simSen>simSentence){
34                     simSentence=simSen;
35                 }
36             }
37             simSentence=λ*entry.getValue()-(1-λ)*simSentence;
38             if(simSentence>maxScore){
39                 maxScore=simSentence;
40                 index=entry.getKey();//句子编号
41             }
42         }
43         MMR_SentScore.put(index, maxScore);
44         if(MMR_SentScore.size()==sortedLinkedSent.size())
45             flag=false;
46     }
47     return MMR_SentScore;
48 }

View Code

测试文本:
家行车记录仪正式发布,告别驾驶孤单<@>继上周70迈智能后视镜在小米众筹上线,数小时便完成了目标众筹之后," +        "今日小米生态链布局中的另一个车载智能新产品,米家行车记录仪正式上线小米商城,售价349元。米家行车记录仪搭载了SONY IMX323图像传感器," +        "感光度高的CMOS可以全面提升暗光环境下的成像表现,感光元件大至1/2.9英寸,阴天或者夜景等弱光条件下,影像画面品质优势尽显。" +        "同时搭载了Mstar的全高清影像处理芯片,具备1080P的图像处理技术。采用的耐高温胶和静电贴组合简单又安全,单指就可以进行触摸按键," +        "160°超广角,覆盖三车道安全全方位。米家行车记录仪是由小米生态链企业板牙科技所生产,也是唯一一家致力于车载智能产品的小米生态链公司。" +        "为何小米生态链持续发力车载智能产品?随着中国汽车市场快速蓬勃发展,目前车辆存量已达1.2亿辆,还在以每年2000万以上的速度扩充," +        "但是连载互联网的车辆占比低于5%。互联快速发展的时代,未来车辆将成为重要的终端入口之一。2015年,行车记录仪全国各品牌销量在3500万台每年," +        "大量厂商试图挤入这个火热的市场。2016下半年,在行业经过大洗牌后,剩下的厂商对自家品牌进行积累,汽车后视镜的2.0时代正式拉开序幕。" +        "2017年,一家叫做70迈的智能后视镜产品出现在了浪潮之中,其背后同时站着顺为和小米等多家知名VC,这样的产品为何会受到多方投资的关注?作为小米生态链企业产品," +        "70迈智能后视镜不惜使用8.88英寸极限高清大屏,“1920*480”高清分辨率,1670万色,搭配高品质银镜7层光学镀膜,完美兼顾界面与镜面。" +        "屏保界面进入沉浸模式,将导航HUD、ADAS预警与整车自然融为一体。70迈创造性的将“小米生态链企业+Mai OS/手机App+汽车后市场服务”的模式相结合," +        "在智能后视镜完美融合进小米产品体系的同时,用精品模式和数据驱动深挖驾驶场景的价值。业内人士表示,未来靠硬件赚大钱已经不再是市场发展主趋势," +        "小米就是一个最好的例子,只有互联网服务才是突破。70迈的产品用户黏性是否足够高,产品更新换代是否足够快,都是70迈一直在专注并打磨持续打磨的环节。" +        "只有持续保持庞大的用户量,才能保证互联网增值服务的空间与价值。"+        "NULL<@>国际<@>齐鲁网<@>日本男子袭击女学生扯走内裤 事发半年嫌犯仍在逃<@>日本警方公布的照片国际在线专稿:据日本媒体3月16日报道," +        "去年9月,东京发生一起男子袭击高中女生并将其内裤扯走的事件。16日,东京警方公开了案发现场摄像头拍下的男子正脸照片。目前,警方正在追捕这名男子。" +        "据警方介绍,去年9月24日晚上10时10分左右,在东京足立区的一个公寓门前,一名正要回家的女高中生被这名男子从背后袭击。男子用手捂住她的嘴," +        "并将她放倒在地,将手伸进裙子里做出猥亵行为,最后扯走内裤逃跑。这名男子大约30多岁,身高在165厘米到170厘米之间,案发时穿着白色T恤和蓝色裤子。" +        "[责任编辑:杨凡、苏琛]想爆料?请登录《阳光连线》(http://minsheng.iqilu.com/)、拨打新闻热线0531-66661234," +        "或登录齐鲁网官方微博(@齐鲁网)提供新闻线索。齐鲁网广告热线0531-81695052,诚邀合作伙伴。"+        "NULL<@>商业职场<@>金羊网<@>国务院:实施城乡居民增收行动 这七类人将“加薪”<@>" +        "国务院6日印发《&ldquo;十三五&rdquo;促进就业规划》,《规划》提出,江苏镇江,上海" +        "实施城乡居民增收行动,技能人才、新型职业农民、科研人员、小微创业者、企业经营管理人员、基层干部队伍、有劳动能力的困难群体这七类人将&ldquo;" +        "加薪&rdquo;。城乡居民增收行动:1.技能人才增收行动。发挥企业主体作用,提升技能人才待遇;完善技术工人薪酬激励机制。" +        "贯通职业资格、学历等认证渠道;营造崇尚技能的社会氛围,培养造就更多技术工人。2.新型职业农民增收行动。" +        "将培育新型职业农民纳入国家教育培训发展规划,提高职业农民增收能力,创造更多就业空间,拓展增收渠道。" +        "3.科研人员增收行动。保障合理的基本薪酬水平,提高就业质量;落实中央财政科研项目资金管理有关政策," +        "发挥科研项目资金的激励引导作用。健全绩效评价和奖励机制,激励创业创新。4.小微创业者增收行动。" +        "深化简政放权、放管结合、优化服务改革,释放市场活力,降低市场准入门槛,健全创业成果利益分配机制," +        "打通创业创富通道。5.企业经营管理人员增收行动。在国有企业建立职业经理人制度," +        "采取多种方式探索完善中长期激励机制;为非公经济组织重点营造公平、公正、透明、稳定的法治环境," +        "依法平等保护财产权。6.基层干部队伍增收行动。完善基层干部队伍薪酬制度;实现对不同地区、不同岗位的差别化激励," +        "充分调动基层干部队伍积极性。7.有劳动能力的困难群体增收行动。鼓励有劳动能力的困难群体提升人力资本,主动参加生产劳动,通过自身努力增加收入。编辑:"+        "NULL<@>财经<@>中江网<@>“千企千镇工程”启动仪式在京举行<@>

summary:

米家行车记录仪是由小米生态链企业板牙科技所生产,也是唯一一家致力于车载智能产品的小米生态链公司。为何小米生态链持续发力车载智能产品?作为小米生态链企业产品,70迈智能后视镜不惜使用8.NULL<@>国际<@>齐鲁网<@>日本男子袭击女学生扯走内裤 事发半年嫌犯仍在逃<@>日本警方公布的照片国际在线专稿:据日本媒体3月16日报道,去年9月,东京发生一起男子袭击高中女生并将其内裤扯走的事件。促进就业规划》,《规划》提出,江苏镇江,上海实施城乡居民增收行动,技能人才、新型职业农民、科研人员、小微创业者、企业经营管理人员、基层干部队伍、有劳动能力的困难群体这七类人将&ldquo加薪。

参考资料:1.阮一峰的博客介绍http://www.ruanyifeng.com/blog/2013/03/automatic_summarization.html     2.The Automatic Creation of Literature Abstracts     3.MMR: Maximal Marginal Relevance  Devrim Şahin & Selçuk Emre Solmaz

转载于:https://www.cnblogs.com/little-horse/p/7191287.html

利用最大边缘相关改进一个简单的文本摘要程序相关推荐

  1. C++ 容器的综合应用的一个简单实例——文本查询程序

    [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例. 通过实现一个简单的文本查询程序,希望能够对C++的容器学习有更深的理解. 由 ...

  2. unity怪物攻击玩家减血_利用Unity协程实现一个简单的怪物寻路与跟随AI

    利用Unity协程实现一个简单的怪物寻路与跟随AI,通过分析怪物行为与逻辑,实现简单的平面怪物寻路与跟随效果. 分析 对于游戏中怪物的行为,简单归纳为如下几部分: 怪物在预设范围内随机移动. 玩家走入 ...

  3. Windows下编译TensorFlow1.3 C++ library及创建一个简单的TensorFlow C++程序

    参考:https://www.cnblogs.com/jliangqiu2016/p/7642471.html Windows下编译TensorFlow1.3 C++ library及创建一个简单的T ...

  4. Vulkan是什么?和我一起完成一个简单的Vulkan应用程序

    在本章,你将学到: Vulkan以及它背后的基本原理: 如何创建一个最简单的Vulkan应用程序: 在本书其余部分将使用到的术语和概念. 本章将介绍并解释Vulkan是什么.我们会介绍API背后的基本 ...

  5. 一个简单的python爬虫程序

    #简介 在每次论文被拒再投的过程中,都需要查询最近的与自己论文相关的会议列表.每到这种情况,我一遍采用的是遍历会伴www.myhuiban.com的网站,然后逐个查看会议,关注的有三点,投稿日期,cc ...

  6. iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序

    iOS开发UI篇-使用嵌套模型完成的一个简单汽车图标展示程序 一.plist文件和项目结构图 说明:这是一个嵌套模型的示例 二.代码示例: YYcarsgroup.h文件代码: 1 //2 // YY ...

  7. 如何构建一个简单的语音识别应用程序

    "In this 10-year time frame, I believe that we'll not only be using the keyboard and the mouse ...

  8. C++程序设计:原理与实践(进阶篇)15.6 实例:一个简单的文本编辑器

    15.6 实例:一个简单的文本编辑器 列表最重要的性质就是可以在不移动元素的情况下对其进行插入或删除操作.下面我们通过一个例子来说明这一点.考虑应该如何在文本编辑器中表示一个文本文件中的字符.所选用的 ...

  9. 一个简单的Java抽奖程序

    文章目录 需求背景 设计思路 代码实现 定义奖品及中奖概率 执行抽奖 中奖率测试 测试结果数据 本文逻辑思想比较简单,旨在了解后端如何设计抽奖以及控制抽奖概率. 需求背景 现在奖品池有如下奖品: 序号 ...

最新文章

  1. ios开发之UIView和UIViewController
  2. Android调用系统软件打开文件(包括apk文件)
  3. hdfs restful API:httpfs与webhdfs的简单使用
  4. Java线程池深入理解
  5. Gradle 引入本地定制 jar 包,而不使用坐标下载 jar 包的方法
  6. 支持.NET的分布式缓存系统memcached
  7. MySQL 我们来聊聊 count(*) 语句的优化方式有哪些?
  8. 看动画轻松理解「链表」实现「 LRU 缓存淘汰算法」
  9. 常见错误:JavaScript 提交form 的时候,Error:对象不支持此属性或方法
  10. ORACLE OUI 中断 do not have sufficient permissions /u01/app/oraInventory
  11. 人月神话-软件开发现状
  12. 数据结构试卷及答案(三)
  13. IOS视频播放器VKVideoPlayer简单教程
  14. 数据库系统的结构(三级模式、两级映像)
  15. CodeForces 1457C Bouncing Ball
  16. Corolado软件峰会关于Geronimo的介绍
  17. 史上最全颜色在古代的叫法(快速搜索)
  18. ISTQB- TTA大纲
  19. VC++中的各种文件的作用
  20. 遇到vcruntime140_1.dll 无法继续执行代码问题

热门文章

  1. android AutoCompleteTextView 实现手机号格式化,附带清空历史的操作
  2. Linux /dev、/etc、/proc、/user...
  3. vim使用技巧之查找字符串
  4. 2021-2025年中国可再生能源核心材料行业市场供需与战略研究报告
  5. “懒人”设计师必备的AI绘画软件,轻松实现建筑设计闭环
  6. Ubuntu系统主机突然断电或其他原因导致磁盘损坏
  7. JavaSwing人事管理系统(Java课程设计)
  8. 什么!WiFi竟然有感知?
  9. ubuntu20.04找不到wifi图标的解决方法
  10. C#中利用事件来传递数据(EventArgs)