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

因为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_list

def 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_data

def build_matrix(key_list):
	'''建立矩阵,矩阵高度和宽度为关键词集合的长度'''
	edge = len(key_list)+1
	matrix = [['' for j in range(edge)] for i in range(edge)]
	return matrix

def init_matrix(key_list,matrix):
	'''初始化矩阵,将关键词集合赋值给第一列和第一行'''
	matrix[0][1:] = key_list
	for i in range(1,len(matrix)):
		matrix[i][0] = key_list[i-1]
	return matrix

def count_matrix(matrix,formated_data):
	'''计算各个关键词出现的次数'''
	#构造一个关键词出现位置的字典
	keyword_location = {}
	keywordlist = matrix[0][1:]
	for word in keywordlist:
		keyword_location[word] = []
		i=1
		for 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 = 0
			if col >= raw:
				if raw==col:
					matrix[raw][col] = counter
				else:
					counter = len(set(keyword_location[matrix[raw][0]])&set(keyword_location[matrix[0][col]]))
					matrix[raw][col]=counter
			else:
				matrix[raw][col] = matrix[col][raw]
	print('完成!')
	return matrix

def write_xlsx(path,data):
	wb = openpyxl.Workbook()
	sheet = wb.active
	sheet.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写的文件读写包。


  • 6
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Gephi是一个开源的网络分析和可视化软件,可以用来研究和展示各种类型的网络数据。在Gephi中,关键词共现矩阵是一种用于分析关键词之间共同出现的模式和关系的方法。 关键词共现矩阵是一个由行和列组成的矩阵,其中每个行和列代表一个关键词矩阵中的每个单元格包含了两个关键词之间的共现次数或者共现频率。通过分析这个矩阵,我们可以了解到哪些关键词经常一起出现,以及它们之间的关系密切程度。 使用Gephi进行关键词共现矩阵分析的步骤大致如下: 首先,我们需要准备一个数据集。数据集可以是一份文本文件,其中包含一系列的文档或文章。在每篇文章中,我们可以提取关键词或者短语来作为分析的对象。 接下来,我们需要使用一个自然语言处理(NLP)工具来对文本进行处理,去除一些无用的单词,例如停用词、标点符号等。然后,我们可以使用合适的算法,如TF-IDF(词频-逆文档频率)算法来计算每个关键词的重要性。 然后,我们将建立一个关键词共现矩阵。在矩阵中,每个行和列代表一个关键词,而矩阵中的每个单元格则表示两个关键词之间的共现次数或者共现频率。 最后,我们可以使用Gephi软件进行可视化和分析。通过将关键词共现矩阵加载到Gephi中,我们可以使用各种布局算法和图形显示方式来展示关键词之间的关系。我们可以根据共现次数或者共现频率来调整节点和边的大小和颜色,以显示出关键词之间的不同关系。 总而言之,Gephi关键词共现矩阵分析是一种通过网络分析和可视化软件来研究和展示关键词之间共同出现模式和关系的方法。通过分析关键词之间的共现矩阵,我们可以更深入地了解关键词之间的关系,从而帮助我们进行更准确的文本分析和信息提取
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值