文本摘要提取(java实现)
2018-05-07 02:32阅读:
解决题目:
文章提取摘要
本文使用方法:
(1)对文本分词和做词性标注(我使用的是stanfordNLP)。
(2)分别计算和提取词性为NN和VV的出现次数最高的前5个词,作为关键词。NN的
map(词,次数),VV的Map(词,次数)。
(3)根据句号等标点将句子断句。
(4)计算每个句子的权值。权值=该句子中出现的关键词的出现次数之和,即(2)中计算得到的关键词的次数之和,不是关键词的前权值按0计算。
(5)权值最高的前n个句子,可作为该文本的摘要。
测试结果:
部分代码(不包括分词和词性标注):
package AutoTextSummary;
import java.awt.List;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import util.QuickSortForClassic;
import util.TextShuffle;
public class TextSummary {
//定义一个Map存储NN关键词+次数最多的5个,次数作为词重要性的权重
private Map
NNKey;
//定义一个Map存储VV关键词+次数最多的5个,次数作为词重要性的权重
private Map
VVKey;
//断句后的集合,Map(句子,权重),权重=关键词权重之和,只要不是前5的词权值都是0,前5名的词权值就是该词出现的次数
private Map
sentence;
//断句标点集合
private HashSet
punctuation;
//文章摘要句子集合
private String[]
summary;
//取前n个关键句子作为摘要
private int n;
public TextSummary(int
n){
NNKey = new HashMap();
VVKey = new HashMap();
//断句标点
punctuation = new HashSet();
punctuation.add('。');
punctuation.add(',');
punctuation.add(';');
punctuation.add('!');
summary = new String[3];
this.n=n;
}
public void getKeyWord(String
srcDir){
//定义一个List,存储NN关键词+次数和VV+次数
ArrayList