Skip to content

摘取关键句和自动摘要

Xusheng edited this page Feb 28, 2020 · 1 revision

抽取关键句

List<String> extractKeySentence(String document, int num)

通过TextRank算法计算每个句子的Rank值,并按Rank值降序排列,提取出前面的几个作为关键句,具体原理可以参见《TextRank算法提取关键词和摘要》

参数

  • document: 文档
  • num: 关键句数量
  • return: 关键句列表

示例

String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
                + "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
                + "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
                + "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
                + "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。";
List<String> senList = AHANLP.extractKeySentence(document, 5);
for (String sen : senList)
    System.out.println(sen);
我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行
该航空母舰将按计划进行系统设备调试和舾装施工
航空母舰主船体完成建造
出坞下水是航空母舰建设的重大节点之一
标志着我国自主设计建造航空母舰取得重大阶段性成果

TextRank算法计算句子相似度时默认使用标准分词,也支持自定义分词器

List<String> extractKeySentence(String segType, String document, int num)

参数

  • segType: 分词器类型,"Standard"或"NLP"
  • document: 文档
  • num: 关键句数量
  • return: 关键句列表

示例

String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
                + "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
                + "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
                + "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
                + "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。";
List<String> senList = AHANLP.extractKeySentence("NLP", document, 5);
for (String sen : senList)
    System.out.println(sen);
该航空母舰将按计划进行系统设备调试和舾装施工
航空母舰主船体完成建造
我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行
出坞下水是航空母舰建设的重大节点之一
标志着我国自主设计建造航空母舰取得重大阶段性成果

抽取关键句时,默认使用逗号、句号、分号(,,。::“”??!!;;)等切分句子,也支持自定义切分符

List<String> extractKeySentence(String segType, String document, int num, String splitReg)

参数

  • segType: 分词器类型,"Standard"或"NLP"
  • document: 文档
  • num: 关键句数量
  • splitReg: 句子切分符号(正则表达式)
  • return: 关键句列表

示例

String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
                + "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
                + "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
                + "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
                + "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。";
List<String> senList = AHANLP.extractKeySentence("NLP", document, 5, "[。??!!]");
for (String sen : senList)
    System.out.println(sen);
我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行
出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果
下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验
目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位
第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造

获取所有句子的rank值

Map<String, Float> calSentenceRanks(String document)

参数

  • document: 文档
  • return: 句子的rank值

示例

String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
                + "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
                + "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
                + "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
                + "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。";
Map<String, Float> sentenceRanks = AHANLP.calSentenceRanks(document);
System.out.println("\n句子-----rank值");
for (Map.Entry<String, Float> entry : sentenceRanks.entrySet())
    System.out.println(entry.getKey() + "-----" + entry.getValue());
句子-----rank值
随着一瓶香槟酒摔碎舰艏-----0.8837113
2013年11月开工-----0.7417009
并全面开展系泊试验-----1.251841
周边船舶一起鸣响汽笛-----0.9694018
航空母舰在拖曳牵引下缓缓移出船坞-----1.2827629
...

分词器默认使用标准分词,同样地,也支持自定义分词器

Map<String, Float> calSentenceRanks(String segType, String document)

参数

  • segType: 分词器类型,"Standard"或"NLP"
  • document: 文档
  • return: 句子的rank值

示例

String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
                + "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
                + "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
                + "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
                + "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。";
Map<String, Float> sentenceRanks = AHANLP.calSentenceRanks("NLP", document);
System.out.println("\n句子-----rank值");
for (Map.Entry<String, Float> entry : sentenceRanks.entrySet())
    System.out.println(entry.getKey() + "-----" + entry.getValue());
句子-----rank值
中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞-----0.8424631
随着一瓶香槟酒摔碎舰艏-----0.9529156
2013年11月开工-----0.7219859
动力、电力等主要系统设备安装到位-----1.0586169
我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行-----1.3635128
...

默认使用逗号、句号、分号(,,。::“”??!!;;)等切分句子,也支持自定义切分符

Map<String, Float> calSentenceRanks(String segType, String document, String splitReg)

参数

  • segType: 分词器类型,"Standard"或"NLP"
  • document: 文档
  • splitReg: 句子切分符号(正则表达式)
  • return: 句子的rank值

示例

String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
                + "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
                + "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
                + "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
                + "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。";
Map<String, Float> sentenceRanks = AHANLP.calSentenceRanks("NLP", document, "[。??!!]");
System.out.println("\n句子-----rank值");
for (Map.Entry<String, Float> entry : sentenceRanks.entrySet())
    System.out.println(entry.getKey() + "-----" + entry.getValue());
句子-----rank值
按照国际惯例,剪彩后进行“掷瓶礼”-----1.009536
中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞-----0.8188225
第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造-----1.0470679
航空母舰在拖曳牵引下缓缓移出船坞,停靠码头-----0.9475869
我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行-----1.2224573
...

自动摘要

String extractSummary(String document, int maxLength)

在TextRank抽取关键句的基础上还考虑了句子在原文中的位置以及句子的长度。

参数

  • document: 文档
  • maxLength: 摘要最大长度
  • return: 摘要

示例

String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
                + "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
                + "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
                + "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
                + "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。";
System.out.println(AHANLP.extractSummary(document, 50));
我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。航空母舰主船体完成建造。

分词默认使用标准分词,同样地,支持自定义分词器类型

String extractSummary(String segType, String document, int maxLength)

参数

  • segType: 分词器类型,"Standard"或"NLP"
  • document: 文档
  • maxLength: 摘要最大长度
  • return: 摘要

示例

String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
                + "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
                + "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
                + "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
                + "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。";
System.out.println(AHANLP.extractSummary("NLP", document, 50));
我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。航空母舰主船体完成建造。

默认使用逗号、句号、分号(,,。::“”??!!;;)等切分句子,也支持自定义切分符

String extractSummary(String segType, String document, int maxLength, String splitReg)

参数

  • segType: 分词器类型,"Standard"或"NLP"
  • document: 文档
  • maxLength: 摘要最大长度
  • splitReg: 句子切分符号(正则表达式)
  • return: 摘要

示例

String document = "我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。" + "中共中央政治局委员、中央军委副主席范长龙出席仪式并致辞。9时许,仪式在雄壮的国歌声中开始。"
                + "按照国际惯例,剪彩后进行“掷瓶礼”。随着一瓶香槟酒摔碎舰艏,两舷喷射绚丽彩带,周边船舶一起鸣响汽笛,全场响起热烈掌声。"
                + "航空母舰在拖曳牵引下缓缓移出船坞,停靠码头。第二艘航空母舰由我国自行研制,2013年11月开工,2015年3月开始坞内建造。" + "目前,航空母舰主船体完成建造,动力、电力等主要系统设备安装到位。"
                + "出坞下水是航空母舰建设的重大节点之一,标志着我国自主设计建造航空母舰取得重大阶段性成果。" + "下一步,该航空母舰将按计划进行系统设备调试和舾装施工,并全面开展系泊试验。"
                + "海军、中船重工集团领导沈金龙、苗华、胡问鸣以及军地有关部门领导和科研人员、干部职工、参建官兵代表等参加仪式。";
System.out.println(AHANLP.extractSummary("NLP", document, 50, "[。??!!]"));
我国第二艘航空母舰下水仪式26日上午在中国船舶重工集团公司大连造船厂举行。