当前位置:   article > 正文

关键词提取一:构造共现矩阵_关键词共词矩阵如何生成

关键词共词矩阵如何生成

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

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

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

  1. [['' 'f' 'd' 'c' 'a' 'b']
  2. ['f' '' '' '' '' '']
  3. ['d' '' '' '' '' '']
  4. ['c' '' '' '' '' '']
  5. ['a' '' '' '' '' '']
  6. ['b' '' '' '' '' '']]
然后计算每个关键词组中关键词22之间共同出现的频率。比如abf这个关键词组中,ab共同出现的频率是1,bf共同出现的频率是1,af共同出现的频率是1.

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

  1. #coding:utf-8
  2. from imports.reader import readtxt,writetxt,wryxls
  3. from imports import mysqlConn
  4. import time
  5. import openpyxl
  6. def quchong(key_list):
  7. new_key_list = set(key_list)
  8. return new_key_list
  9. def get_set_key(data):
  10. '''构建一个关键词集合,用于作为共现矩阵的首行和首列'''
  11. key_list = []
  12. for word in data:
  13. word = word.replace('\r\n','')
  14. key_list.append(word)
  15. set_key_list = quchong(key_list)
  16. key_list = list(set_key_list)
  17. print(len(key_list))
  18. return key_list
  19. #set_key_list = list()
  20. def format_data():
  21. '''格式化待处理数据'''
  22. formated_data = []
  23. totalwords = mysqlConn.selByCol('fangtianxiadb','content_cixing','totalword')
  24. for format_words in totalwords:
  25. sub_formated = format_words[0].strip().split(' ')
  26. #print('sub_formated:',sub_formated)
  27. formated_data.append(sub_formated)
  28. return formated_data
  29. def build_matrix(key_list):
  30. '''建立矩阵,矩阵高度和宽度为关键词集合的长度'''
  31. edge = len(key_list)+1
  32. matrix = [['' for j in range(edge)] for i in range(edge)]
  33. return matrix
  34. def init_matrix(key_list,matrix):
  35. '''初始化矩阵,将关键词集合赋值给第一列和第一行'''
  36. matrix[0][1:] = key_list
  37. for i in range(1,len(matrix)):
  38. matrix[i][0] = key_list[i-1]
  39. return matrix
  40. def count_matrix(matrix,formated_data):
  41. '''计算各个关键词出现的次数'''
  42. #构造一个关键词出现位置的字典
  43. keyword_location = {}
  44. keywordlist = matrix[0][1:]
  45. for word in keywordlist:
  46. keyword_location[word] = []
  47. i=1
  48. for each_line in formated_data:
  49. if word in each_line:
  50. keyword_location[word].append(i)
  51. i+=1
  52. print('构造一个关键词出现位置的字典')
  53. #按行遍历,跳过下标为0的元素
  54. for raw in range(1,len(matrix)):
  55. #按列遍历,跳过下标为0的元素
  56. for col in range(1,len(matrix)):
  57. counter = 0
  58. if col >= raw:
  59. if raw==col:
  60. matrix[raw][col] = counter
  61. else:
  62. counter = len(set(keyword_location[matrix[raw][0]])&set(keyword_location[matrix[0][col]]))
  63. matrix[raw][col]=counter
  64. else:
  65. matrix[raw][col] = matrix[col][raw]
  66. print('完成!')
  67. return matrix
  68. def write_xlsx(path,data):
  69. wb = openpyxl.Workbook()
  70. sheet = wb.active
  71. sheet.title = '2007测试表'
  72. for i in range(len(data)):
  73. for j in range(len(data[i])):
  74. sheet.cell(row=i+1,column=j+1,value=str(data[i][j]))
  75. wb.save(path)
  76. print('写入xlsx成功!')
  77. def getMatrix():
  78. data = readtxt('E:/data/wordbag.txt','utf-8')
  79. key_list = get_set_key(data)
  80. formated_data = format_data()
  81. #formated_data = [['过户','税率'],['花瓣','微距','出点'],['精彩图片','小狗','日子']]
  82. #print(set_key)
  83. ini_matrix = build_matrix(key_list)
  84. matrix = init_matrix(key_list,ini_matrix)
  85. #print(matrix)
  86. result_matrix = count_matrix(matrix,formated_data)
  87. #print(writetxt('E:/data/matrix/matrix.txt',result_matrix,'utf-8'))
  88. write_xlsx('E:/data/matrix/matrix.xlsx',result_matrix)
  89. if __name__ == '__main__':
  90. getMatrix()
代码中给出了两种存储方式,一种txt,一种xlsx,因为xls的表容量限制在256,关键词量大的情况需要存成xlsx。

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


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/764367
推荐阅读
相关标签
  

闽ICP备14008679号