【NLP】关键词共现/属性共现矩阵
【NLP】关键词共现/属性共现矩阵【共现】理解起来无非是两个词语同时出现的频次作为一个指标,构造矩阵。矩阵的第一列和第一行都是词语列表中的所有词,因此对角线一般设置为0——即不把自己和自己共现算进去。假如矩阵为M,M【i】【j】就表示第i+1个词和第j+1个词一起在文档集合里出现了多少次,且M【i】【j】=M【j】【i】。1.构建关键词矩阵参考网上代码:感谢Python构建关键词共现矩阵...
【NLP】关键词共现/属性共现矩阵
【共现】理解起来无非是两个词语同时出现的频次作为一个指标,构造矩阵。矩阵的第一列和第一行都是词语列表中的所有词,因此对角线一般设置为0——即不把自己和自己共现算进去。假如矩阵为M,M【i】【j】
就表示第i+1个词和第j+1个词一起在文档集合里出现了多少次,且M【i】【j】=M【j】【i】。
1.构建关键词矩阵
参考网上代码:
感谢Python构建关键词共现矩阵
输入有两个:
DATA——可以理解为文档集合,[[],[],[],…]每个小列表代表一篇文章
Keywordlist——是关键词列表,共现矩阵也是基于它初始化的
我是直接从本地数据库里读取了需要的数据,最后生成CSV文件的矩阵:
这部分在MAIN()中改了下,其他和参考代码一致。
def mainkeyword():
output_path = r'随便起名.csv'
# data = reader.readxls_col(keyword_path)[0]
#原始数据
data=dbdata()
#关键词列表
set_key_list =dbkey()
# set_key_list = get_set_key(data)
formated_data = format_data(data)
matrix = build_matirx(set_key_list)
matrix = init_matrix(set_key_list, matrix)
result_matrix = count_matrix(matrix, formated_data)
np.savetxt(output_path, result_matrix, fmt=('%s,'*len(matrix))[:-1])
dbkey()
dbdata()
结果如下:可能很多词只共现1次,总体算是稀疏矩阵。
2.构建属性共现矩阵
帮忙做一个项目时,对方提到属性这个概念,即可以理解为,把几个词归为一个属性,这样构造的属性共现矩阵就可以大大减少矩阵中数目为0的部分,而且会增大共现次数。
可以将代码里的keywordlist变成属性的字典,每个属性包含某些关键词
大致像这样👇
相比于上面关键词代码,只需改动计算矩阵共现频次的代码和Main()的代码:
def count_matrix_attr(matrix, formated_data):
'''计算各个属性共现次数'''
zd=dbattr()[0]
for row in range(1, len(matrix)):
# 遍历矩阵第一行,跳过下标为0的元素
for col in range(1, len(matrix)):
# 遍历矩阵第一列,跳过下标为0的元素
# 实际上就是为了跳过matrix中下标为[0][0]的元素,因为[0][0]为空,不为关键词
if matrix[0][row] == matrix[col][0]:
# 如果取出的行关键词和取出的列关键词相同,则其对应的共现次数为0,即矩阵对角线为0
matrix[col][row] = str(0)
else:
counter = 0
# 初始化计数器
for ech in formated_data:
# 遍历格式化后的原始数据,让取出的行关键词和取出的列关键词进行组合,
# 再放到每条原始数据中查询
for w1 in zd[matrix[0][row]]:
for w2 in zd[matrix[col][0]]:
if w1 in ech and w2 in ech:
counter += 1
else:
continue
matrix[col][row] = str(counter)
return matrix
def main():
output_path = r'随便起名+1.csv'
# data = reader.readxls_col(keyword_path)[0]
#原始数据
data=dbdata()
# dbkey()
# dbdata()
#属性列表
attr_list=dbattr()[1]
# set_key_list = get_set_key(data)
formated_data = format_data(data)
matrix = build_matirx_attr(attr_list)
matrix = init_matrix_attr(attr_list, matrix)
result_matrix = count_matrix_attr(matrix, formated_data)
np.savetxt(output_path, result_matrix, fmt=('%s,'*len(matrix))[:-1],encoding='utf-8')
结果如下👇(看起来好了蛮多)
------------------------------2020-02-11 By EchoZhang---------------
更多推荐
所有评论(0)