python实现textrank关键词提取


Posted in Python onJune 22, 2018

用python写了一个简单版本的textrank,实现提取关键词的功能。

import numpy as np 
import jieba 
import jieba.posseg as pseg 
 
class TextRank(object): 
   
  def __init__(self, sentence, window, alpha, iternum): 
    self.sentence = sentence 
    self.window = window 
    self.alpha = alpha 
    self.edge_dict = {} #记录节点的边连接字典 
    self.iternum = iternum#迭代次数 
 
  #对句子进行分词 
  def cutSentence(self): 
    jieba.load_userdict('user_dict.txt') 
    tag_filter = ['a','d','n','v'] 
    seg_result = pseg.cut(self.sentence) 
    self.word_list = [s.word for s in seg_result if s.flag in tag_filter] 
    print(self.word_list) 
 
  #根据窗口,构建每个节点的相邻节点,返回边的集合 
  def createNodes(self): 
    tmp_list = [] 
    word_list_len = len(self.word_list) 
    for index, word in enumerate(self.word_list): 
      if word not in self.edge_dict.keys(): 
        tmp_list.append(word) 
        tmp_set = set() 
        left = index - self.window + 1#窗口左边界 
        right = index + self.window#窗口右边界 
        if left < 0: left = 0 
        if right >= word_list_len: right = word_list_len 
        for i in range(left, right): 
          if i == index: 
            continue 
          tmp_set.add(self.word_list[i]) 
        self.edge_dict[word] = tmp_set 
 
  #根据边的相连关系,构建矩阵 
  def createMatrix(self): 
    self.matrix = np.zeros([len(set(self.word_list)), len(set(self.word_list))]) 
    self.word_index = {}#记录词的index 
    self.index_dict = {}#记录节点index对应的词 
 
    for i, v in enumerate(set(self.word_list)): 
      self.word_index[v] = i 
      self.index_dict[i] = v 
    for key in self.edge_dict.keys(): 
      for w in self.edge_dict[key]: 
        self.matrix[self.word_index[key]][self.word_index[w]] = 1 
        self.matrix[self.word_index[w]][self.word_index[key]] = 1 
    #归一化 
    for j in range(self.matrix.shape[1]): 
      sum = 0 
      for i in range(self.matrix.shape[0]): 
        sum += self.matrix[i][j] 
      for i in range(self.matrix.shape[0]): 
        self.matrix[i][j] /= sum 
 
  #根据textrank公式计算权重 
  def calPR(self): 
    self.PR = np.ones([len(set(self.word_list)), 1]) 
    for i in range(self.iternum): 
      self.PR = (1 - self.alpha) + self.alpha * np.dot(self.matrix, self.PR) 
 
  #输出词和相应的权重 
  def printResult(self): 
    word_pr = {} 
    for i in range(len(self.PR)): 
      word_pr[self.index_dict[i]] = self.PR[i][0] 
    res = sorted(word_pr.items(), key = lambda x : x[1], reverse=True) 
    print(res) 
 
if __name__ == '__main__': 
  s = '程序员(英文Programmer)是从事程序开发、维护的专业人员。一般将程序员分为程序设计人员和程序编码人员,但两者的界限并不非常清楚,特别是在中国。软件从业人员分为初级程序员、高级程序员、系统分析员和项目经理四大类。' 
  tr = TextRank(s, 3, 0.85, 700) 
  tr.cutSentence() 
  tr.createNodes() 
  tr.createMatrix() 
  tr.calPR() 
  tr.printResult()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Pyhton中防止SQL注入的方法
Feb 05 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 Python
浅谈python迭代器
Nov 08 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
python3.6.3安装图文教程 TensorFlow安装配置方法
Jun 24 Python
Python实现iOS自动化打包详解步骤
Oct 03 Python
学习python可以干什么
Feb 26 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
简单了解为什么python函数后有多个括号
Dec 19 Python
详解Python3 定义一个跨越多行的字符串的多种方法
Sep 06 Python
python生成word合同的实例方法
Jan 12 Python
Django操作cookie的实现
May 26 Python
python实现自主查询实时天气
Jun 22 #Python
python实现定时提取实时日志程序
Jun 22 #Python
pandas 读取各种格式文件的方法
Jun 22 #Python
python使用turtle库绘制时钟
Mar 25 #Python
Python日期时间对象转换为字符串的实例
Jun 22 #Python
python pandas 对时间序列文件处理的实例
Jun 22 #Python
python使用turtle绘制分形树
Jun 22 #Python
You might like
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
Javascript自定义排序 node运行 实例
2013/06/05 Javascript
JavaScript实现广告的关闭与显示效果实例
2015/07/02 Javascript
用户代理字符串userAgent可实现的四个识别
2015/09/20 Javascript
jQuery移动web开发之页面跳转和加载外部页面的实现
2015/12/04 Javascript
JS中this上下文对象使用方式
2016/10/09 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
jQuery实现checkbox全选功能完整实例
2018/07/12 jQuery
js实现简单选项卡功能
2020/03/23 Javascript
微信小程序实现简单评论功能
2018/11/28 Javascript
jQuery访问json文件中数据的方法示例
2019/01/28 jQuery
[36:09]Secret vs VG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
Python2.x和3.x下maketrans与translate函数使用上的不同
2015/04/13 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
Python实现求笛卡尔乘积的方法
2017/09/16 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
pytorch程序异常后删除占用的显存操作
2020/01/13 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
python re.match()用法相关示例
2021/01/27 Python
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
蔻驰英国官网:COACH英国
2020/07/19 全球购物
大学生护理专业自荐信
2013/10/03 职场文书
高中军训感言600字
2014/03/11 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js
解决spring.thymeleaf.cache=false不起作用的问题
2022/06/10 Java/Android