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个单词,作为候选关键词。
部分实现代码
生成单词窗口
矩阵迭代
参考文献
1.http://www.tuicool.com/articles/rMZfey
2.http://www.hankcs.com/nlp/textrank-algorithm-to-extract-the-keywords-java-implementation.html
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
相关文章推荐
- 笔记-TextRank与关键词提取
- 基于TextRank的关键词、短语、摘要提取
- TextRank算法提取关键词的Java实现
- textrank 关键词提取-python实现
- 基于TextRank的关键词、短语、摘要提取
- 关键词提取算法TextRank
- 基于TextRank的关键词提取算法
- 中文文本提取关键词、关键词组、关键句(textrank4zh使用)--python学习
- python实现textrank关键词提取
- textrank提取文档关键词
- TextRank 算法提取关键词的 Java 实现
- 文章提取关键词_jieba(IF-IDF/TextRank)
- textrank算法原理与提取关键词、自动提取摘要PYTHON
- TextRank算法提取关键词的Java实现
- [NLP技术]关键词提取算法-TextRank
- 短文本关键词提取算法RAKE & TextRank及改进
- 使用TextRank实现的关键字提取
- 自动提取文本关键词demo
- TF-IDF与余弦相似性的应用(一):自动提取关键词
- Word2Vec提取关键词,词语相似度