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 相关文章推荐
Python中处理unchecked未捕获异常实例
Jan 17 Python
python实现支付宝当面付(扫码支付)功能
May 30 Python
Python Matplotlib库安装与基本作图示例
Jan 09 Python
Python Flask框架模板操作实例分析
May 03 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
python命名空间(namespace)简单介绍
Aug 10 Python
python SocketServer源码深入解读
Sep 17 Python
python实现淘宝购物系统
Oct 25 Python
最小二乘法及其python实现详解
Feb 24 Python
Django中FilePathField字段的用法
May 21 Python
django rest framework 过滤时间操作
Jul 12 Python
Python 如何定义匿名或内联函数
Aug 01 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
PHP执行速率优化技巧小结
2008/03/15 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
javascript 数组的方法集合
2008/06/05 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
js实现用户注册协议倒计时的方法
2015/01/21 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
js console.log打印对像与数组用法详解
2016/01/21 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
学习Node.js模块机制
2016/10/17 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
2016/11/03 Javascript
Vue动态组件实例解析
2017/08/20 Javascript
mongodb初始化并使用node.js实现mongodb操作封装方法
2019/04/02 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
vue与iframe之间的信息交互的实现
2020/04/08 Javascript
使用python实现省市三级菜单效果
2016/01/20 Python
Pycharm 设置自定义背景颜色的图文教程
2018/05/23 Python
vscode 配置 python3开发环境的方法
2019/09/19 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
Python如何实现爬取B站视频
2020/05/20 Python
详解Python中@staticmethod和@classmethod区别及使用示例代码
2020/12/14 Python
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
英国123鲜花网站:123 Flowers
2019/07/07 全球购物
ASOS西班牙官网:英国在线时尚和美容零售商
2020/01/10 全球购物
儿科护士自我鉴定
2013/10/14 职场文书
公司领导推荐信
2013/11/12 职场文书
中学生班主任评语
2014/01/30 职场文书
企业安全生产标语
2014/06/06 职场文书
晚自修旷课检讨书怎么写
2014/11/17 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
2016年主题党日活动总结
2016/04/05 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL
工厂无线对讲系统解决方案
2022/02/18 无线电
Golang Web 框架Iris安装部署
2022/08/14 Python