因为TFIDF算法的提取关键词的准确性很差,tfidf提取出的关键词很难看出文本的主旨,于是考虑结合文本语义对词汇的权重(IDF)重新分配,于是想要借鉴SKE算法,即将词语语义特征融入关键词提取过程中,构建词语语义相似度网络并利用居间度密度度量词语语义关键度。

因为构造词语网络需要先构造关键词共现图,关键词共现图需要先构造关键词共现矩阵,所以第一步就是构造关键词共现矩阵。

构造关键词共现矩阵的思路是构造一个空的矩阵,将矩阵的首行和首列用关键词填满

[['' 'f' 'd' 'c' 'a' 'b']['f' '' '' '' '' '']['d' '' '' '' '' '']['c' '' '' '' '' '']['a' '' '' '' '' '']['b' '' '' '' '' '']]

然后计算每个关键词组中关键词22之间共同出现的频率。比如abf这个关键词组中,ab共同出现的频率是1,bf共同出现的频率是1,af共同出现的频率是1.

[['' 'f' 'd' 'c' 'a' 'b']['f' '' '' '' '1' '1']['d' '' '' '' '' '']['c' '' '' '' '' '']['a' '1' '' '' '' '1']['b' '1' '' '' '1' '']]

代码中主要计算量集中在计算关键词共现的次数上,因为要不断递归计算,如果使用普通的for循环,几千的关键词量就需要几个小时,借用 张同学的思路,将关键词一一比对改成将每个关键词出现的位置存入一个字典,{‘关键词’:[1,3,5,29,45,89]}的格式,然后将两个需要比对的关键词从字典中取出其对应的位置列表(list),将列表强转城set,再利用两个set之间求交集set()&set()的方法,求出两关键词的共现频率。

#coding:utf-8
from imports.reader import readtxt,writetxt,wryxls
from imports import mysqlConn
import time
import openpyxl
def quchong(key_list):new_key_list = set(key_list)return new_key_listdef get_set_key(data):'''构建一个关键词集合,用于作为共现矩阵的首行和首列'''key_list = []for word in data:word = word.replace('\r\n','')key_list.append(word)set_key_list = quchong(key_list)key_list = list(set_key_list)print(len(key_list))return key_list#set_key_list = list()def format_data():'''格式化待处理数据'''formated_data = []totalwords = mysqlConn.selByCol('fangtianxiadb','content_cixing','totalword')for format_words in totalwords:sub_formated = format_words[0].strip().split(' ')#print('sub_formated:',sub_formated)formated_data.append(sub_formated)return formated_datadef build_matrix(key_list):'''建立矩阵,矩阵高度和宽度为关键词集合的长度'''edge = len(key_list)+1matrix = [['' for j in range(edge)] for i in range(edge)]return matrixdef init_matrix(key_list,matrix):'''初始化矩阵,将关键词集合赋值给第一列和第一行'''matrix[0][1:] = key_listfor i in range(1,len(matrix)):matrix[i][0] = key_list[i-1]return matrixdef count_matrix(matrix,formated_data):'''计算各个关键词出现的次数'''#构造一个关键词出现位置的字典keyword_location = {}keywordlist = matrix[0][1:]for word in keywordlist:keyword_location[word] = []i=1for each_line in formated_data:if word in each_line:keyword_location[word].append(i)i+=1        print('构造一个关键词出现位置的字典')       #按行遍历,跳过下标为0的元素for raw in range(1,len(matrix)):#按列遍历,跳过下标为0的元素for col in range(1,len(matrix)):counter = 0if col >= raw:if raw==col:matrix[raw][col] = counterelse:counter = len(set(keyword_location[matrix[raw][0]])&set(keyword_location[matrix[0][col]]))matrix[raw][col]=counterelse:matrix[raw][col] = matrix[col][raw]print('完成!')return matrixdef write_xlsx(path,data):wb = openpyxl.Workbook()sheet = wb.activesheet.title = '2007测试表'for i in range(len(data)):for j in range(len(data[i])):sheet.cell(row=i+1,column=j+1,value=str(data[i][j]))wb.save(path)print('写入xlsx成功!')def getMatrix():data = readtxt('E:/data/wordbag.txt','utf-8')key_list = get_set_key(data)formated_data = format_data()#formated_data = [['过户','税率'],['花瓣','微距','出点'],['精彩图片','小狗','日子']]#print(set_key)ini_matrix = build_matrix(key_list)matrix = init_matrix(key_list,ini_matrix)#print(matrix)result_matrix = count_matrix(matrix,formated_data)#print(writetxt('E:/data/matrix/matrix.txt',result_matrix,'utf-8'))write_xlsx('E:/data/matrix/matrix.xlsx',result_matrix)if __name__ == '__main__':getMatrix()

代码中给出了两种存储方式,一种txt,一种xlsx,因为xls的表容量限制在256,关键词量大的情况需要存成xlsx。

其中import的有自己写的代码,以及博主liuruilun写的文件读写包。

关键词提取一:构造共现矩阵相关推荐

  1. python关键词共现图谱_如何用知网导出的关键词 几秒 生成共现矩阵及图谱 》完整版...

    自编软件使用技能视频演示(一) 最新整理完整版的,从收集数据 到 共词矩阵 到 图谱. 在做社会网络分析时,首先需要得到共现矩阵,如关键词共现矩阵.作者共现矩阵.机构共现矩阵等. 可是如何把从知网里导 ...

  2. 文本挖掘(part6)--共现矩阵

    学习笔记,仅供参考,有错必纠 文档信息的向量化 共现矩阵(Co-currence matrix) 共现矩阵概述 I like deep learning. I like NLP. I enjoy mo ...

  3. 手把手教你上手Gephi制作基于共现矩阵的论文作者关系图谱

    引言:Gephi是一款开源免费跨平台基于JVM的复杂网络分析软件,其主要用于各种网络和复杂系统,动态和分层图的交互可视化与探测开源工具. --摘自百度百科 温馨提示:近期本人访问GitHub出现间歇性 ...

  4. 【NLP】关键词共现/属性共现矩阵

    [NLP]关键词共现/属性共现矩阵 [共现]理解起来无非是两个词语同时出现的频次作为一个指标,构造矩阵.矩阵的第一列和第一行都是词语列表中的所有词,因此对角线一般设置为0--即不把自己和自己共现算进去 ...

  5. python关键词共现_python 共现矩阵的实现

    1.前言 最近在学习python词库的可视化,其中有一个依据共现矩阵制作的可视化,感觉十分炫酷,便以此复刻. 2.项目背景 本人利用爬虫获取各大博客网站的文章,在进行jieba分词,得到每篇文章的关键 ...

  6. hadoop矩阵乘法源码_使用Hadoop计算共现矩阵

    hadoop矩阵乘法源码 这篇文章继续我们在MapReduce的数据密集型文本处理一书中实现MapReduce算法的系列. 这次,我们将从文本语料库创建单词共现矩阵. 本系列以前的文章是: 使用Map ...

  7. 使用Hadoop计算共现矩阵

    这篇文章继续我们在MapReduce的数据密集型文本处理一书中实现MapReduce算法的系列. 这次,我们将从文本语料库创建单词共现矩阵. 本系列以前的文章是: 使用MapReduce进行数据密集型 ...

  8. 通过共现矩阵和余弦相似度实现机器对单词的认知、python实现

    通过共现矩阵和余弦相似度实现机器对单词的认知.python实现 本文介绍的定义: 一.语料库预处理 二.单词的分布式表示 三.单词的相似度 四.相似单词排序 本文介绍的定义: 语料库.计数方法的目的. ...

  9. A股实践 :图神经网络与新闻共现矩阵策略(附代码)

    量化投资与机器学习微信公众号,是业内垂直于量化投资.对冲基金.Fintech.人工智能.大数据等领域的主流自媒体.公众号拥有来自公募.私募.券商.期货.银行.保险.高校等行业30W+关注者,荣获202 ...

最新文章

  1. 【组队学习】一月微信图文索引
  2. 我想问一下为什么会开3分钟系统自动会从新启动呢?
  3. 编程语言与思维:科技公司如何自我重构?
  4. 专家解读:阅读AI论文对找工作有帮助吗?
  5. 以太坊代码标准是什么_以太坊的包容性开发语言里到底藏着什么秘密?
  6. 结构化数据存储,如何设计才能满足需求?
  7. 电视机鸿蒙os卡,开卖40天,搭载鸿蒙OS操作系统的华为电视就差评如潮?用户:亏了...
  8. DllRegisterServer调用失败的解决办法
  9. WT2003H语音芯片在红绿灯上的运用,一款可远程更新的语音IC方案
  10. python-将图片存储到pdf中
  11. 渗透测试实验_安装Windows7旗舰版
  12. 算法 - 递归实现汉诺塔(The Tower of Hanoi)
  13. C++ ERROR:error: passing 'XXX' as 'this' argument of 'XXX' discards qualifiers
  14. C语言中有bool类型吗?
  15. 使用Hyper-V集群和存储功能以达到HA
  16. Tomcat简介、服务部署、虚拟主机配置及相关配置文件参数优化
  17. TechBeat: 强化学习ppo让决策智能演化出无限可能
  18. 放置js文件的公开服务器,node.js搭建简单静态文件服务器
  19. WordPress | 阿里云轻量应用服务器wordpress升级php步骤
  20. HDU 4540 威威猫系列故事——打地鼠

热门文章

  1. Portal技术白皮书
  2. java基础13—方法
  3. APISpace 分钟级降水预报API
  4. ntag213和215有什么区别_【NTAG213/215/216芯片读写器NFC读卡器发卡器】 - 太平洋安防网...
  5. 技术总结-从输入 URL 到页面加载完成的过程中都发生了什么事情?
  6. 2012/10/03---生化危机
  7. android 高性能手机排行榜,2020年9月安兔兔Android旗舰手机性能跑分排行榜前十名推荐榜单...
  8. LED驱动程序--可拓展的LED驱动程序
  9. 张小庆,在路上-开始(2)第一天上班
  10. 找到右下角弹广告的真凶