TextRank 提取摘要

接上篇所述, 我们实现了提取一段句子的关键字, 接下来实现提取摘要,

我们可以接着根据 PageRank 算法, 按照我们划分出来的关键字生成权重, 语料:

程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。

预处理

  1. 进行文本分段, 这里按照 ,|。 切分,, 实际情况因人而异;
  2. 去空白, 分词, 提取关键字, 结果如下:
    ```

[ 一 ]:

[ 二 ]:

[ 然而 ]:

[ 三 ]:

[ 通常 ]:


### 分析关系
 两层 `for-loop`, 根据关键词生成每段话之间的关系, 代码

for sentence,kw in sentence_kw.items():
temp = {}
for sent_check, kw_check in sentence_kw.items():
temp[sent_check] = len([word for word in kw if word in kw_check])
cooc_dict[sentence] = temp

### 使用 `PageRank` 公式收敛结果
这次就更简单了, 和上一篇的提取关键字代码可以说是大同小异了,
这里祭出公式
![](http://upload-images.jianshu.io/upload_images/545288-7447d96632d3d17c.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
```python
while (iter_no > index and  error > err):
    error = 0
    TR_copy = TR.copy()
    for sent,cooc in graph.items():
        temp = 0
        for link_sent,weight in cooc.items():
          t = sum(graph[link_sent].values())
          t = 1 if t == 0 else t
          temp += TR[link_sent] * weight / t
        TR[sent] = 1 - d + d * temp
    error += (TR[sent] - TR_copy[sent])**2
    index += 1

对结果排个序, 取前三个:

这类算法在有限的一段时间内终止
这类算法在有限的时间内终止
算法可大致分为基本算法、数据结构的算法、数论算法、计算几何的算法、图的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法、厄米变形模型、随机森林算法

相关文章 :
http://www.hankcs.com/nlp/textrank-algorithm-to-extract-the-keywords-java-implementation.html
http://www.letiantian.me/2014-12-01-text-rank/