您的位置:首页 > 其它

textrank关键词提取

2017-04-07 14:12 204 查看
  TextRank是在Google的PageRank算法启发下,针对文本里的句子设计的权重算法,目标是自动摘要。它利用投票的原理,让每一个单词给它的邻居(术语称窗口)投赞成票,票的权重取决于自己的票数。这是一个“先有鸡还是先有蛋”的悖论,PageRank采用矩阵迭代收敛的方式解决了这个悖论。

PageRank的计算公式:

S(Vi)=(1−d)+d∗∑j∈In(Vi)1|Out(Vj)|S(Vj)

  S(Vi)是网页i的中重要性(PR值)。d是阻尼系数,一般设置为0.85。In(Vi)是存在指向网页i的链接的网页集合。Out(Vj)是网页j中的链接存在的链接指向的网页的集合。|Out(Vj)|是集合中元素的个数。

  PageRank需要使用上面的公式多次迭代才能得到结果。初始时,可以设置每个网页的重要性为1。上面公式等号左边计算的结果是迭代后网页i的PR值,等号右边用到的PR值全是迭代前的。

TextRank的计算公式:

WS(Vi)=(1−d)+d∗∑Vj∈In(Vi)Wji∑Vk∈Out(Vj)wjkWS(Vj)

  TextRank 算法是一种用于文本的基于图的排序算法。其基本思想来源于谷歌的 PageRank算法, 通过把文本分割成若干组成单元(单词、句子)并建立图模型, 利用投票机制对文本中的重要成分进行排序, 仅利用单篇文档本身的信息即可实现关键词提取、文摘。和 LDA、HMM 等模型不同, TextRank不需要事先对多篇文档进行学习训练, 因其简洁有效而得到广泛应用。

TextRank实现步骤

1、文章分词: 对每一篇文章进行分词,分词系统主要由坤雁分词系统、ansj分词,结巴分词等。

2、分词结果数据清洗: 主要包括去停用词、去除符号字母数字等。

3、构建候选关键词图: 根据设定的词语选择窗口截取文本的分词结果,将每个词语作为候选关键词图的节点,截取的每一段文本中的词语作为相邻的边,以此构建候选关键词图。

4、关键词提取: 利用pagerank思想循环迭代候选关键词图, 每个节点的权重初始化化为1.0f,通过设定的迭代次数达到稳定后,对节点权重进行倒序排序,从而得到最重要的num个单词,作为候选关键词。

部分实现代码

生成单词窗口

for (String w : wordList){
if (!words.containsKey(w)){
words.put(w, new TreeSet<String>());
}
que.offer(w);
if (que.size() > 5){
que.poll();
}
for (String w1 : que){
for (String w2 : que){
if (w1.equals(w2)){
continue;
}
words.get(w1).add(w2);
words.get(w2).add(w1);
}
}
}


矩阵迭代

Map<String, Float> score = new HashMap<String, Float>();
for (int i = 0; i < max_iter; ++i){
Map<String, Float> m = new HashMap<String, Float>();
float max_diff = 0;
for (Map.Entry<String, Set<String>> entry : words.entrySet()){
String key = entry.getKey();
Set<String> value = entry.getValue();
m.put(key, 1 - d);
for (String element : value){
int size = words.get(element).size();
if (key.equals(element) || size == 0) continue;
m.put(key, m.get(key) + d / size * (score.get(element) == null ? 0 : score.get(element)));
}
max_diff = Math.max(max_diff, Math.abs(m.get(key) - (score.get(key) == null ? 0 : score.get(key))));
}
score = m;
if (max_diff <= min_diff) break;
}


参考文献

1.http://www.tuicool.com/articles/rMZfey

2.http://www.hankcs.com/nlp/textrank-algorithm-to-extract-the-keywords-java-implementation.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  nlp 关键词