jieba-基于TextRank关键词提取的实现

jieba-基于TextRank关键词提取的实现


  • 对每个句子进行分词和词性标注处理
  • 过滤掉除指定词性外的其他单词,过滤掉出现在停用词表的单词,过滤掉长度小于2的单词
  • 将剩下的单词中循环选择一个单词,将其与其后面4个单词分别组合成4条边。

例如:[‘有’,‘媒体’, ‘曝光’,‘高圆圆’, ‘和’, ‘赵又廷’,‘现身’, ‘台北’, ‘桃园’,‘机场’,‘的’, ‘照片’]对于‘媒体‘这个单词,就有(‘媒体’, ‘曝光’)、(‘媒体’, ‘圆’)、(‘媒体’, ‘和’)、(‘媒体’, ‘赵又廷’)4条边,且每条边权值为1,当这条边在之后再次出现时,权值再在基础上加1.

  • 有了这些数据后,我们就可以构建出候选关键词图,图的概念有基础的人可能会很好理解,不理解其实也没关系,按上面例子,你只用知道这一步我们把2个单词组成的边,和其权值记录了下来。
  • 这样我们就可以套用TextRank的公式,迭代传播各节点的权值,直至收敛。
  • 对结果中的Rank值进行倒序排序,筛选出前面的几个单词,就是我们需要的关键词了。

实现代码:

#encoding=utf-8
from __future__ import unicode_literals
import sys
sys.path.append("../")

import jieba
import jieba.posseg
import jieba.analyse


s = "线程是程序执行时的最小单位,它是进程的一个执行流,\
        是CPU调度和分派的基本单位,一个进程可以由很多个线程组成,\
        线程间共享进程的所有资源,每个线程有自己的堆栈和局部变量。\
        线程由CPU独立调度执行,在多CPU环境下就允许多个线程同时运行。\
        同样多线程也可以实现并发操作,每个请求分配一个线程来处理。"
print('-'*40)
print(' TextRank关键词提取')
print('-'*40)

for x, w in jieba.analyse.textrank(s, withWeight=True):
    print('%s %s' % (x, w))

运行结果:
jieba-基于TextRank关键词提取的实现