找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 1893|回复: 0

[求助] 基于kmeans的中文关键词提取 代码有些问题 请教一下大佬们

0

主题

0

帖子

0

积分

贫民

积分
0
waston_yy 发表于 2023-3-21 13:41:47 | 显示全部楼层 |阅读模式
2威望
本帖最后由 waston_yy 于 2023-3-21 13:45 编辑

代码如下:
  1. import sys,os
  2. from sklearn.cluster import KMeans
  3. from sklearn import metrics
  4. from sklearn.decomposition import PCA
  5. import pandas as pd
  6. import numpy as np
  7. import matplotlib.pyplot as plt
  8. import math
  9. from scipy import spatial

  10. def getkeywords_kmeans(data,topK):
  11.     words = data["word"]  # 词汇
  12.     vecs = data.iloc[:, 1:]  # 向量表示
  13.     i=2
  14.     kmeans = KMeans(n_clusters=i).fit(vecs)
  15.     labels = kmeans.labels_  # 类别结果标签
  16.     labels = pd.DataFrame(labels, columns=['label'])
  17.     new_df = pd.concat([labels, vecs], axis=1)
  18.     df_count_type = new_df.groupby('label').size()  # 各类别统计个数
  19.     # print df_count_type
  20.     vec_center = kmeans.cluster_centers_  # 聚类中心

  21.     #vec_words = np.array(vecs)  # 候选关键词向量,dataFrame转array
  22.     quantity = pd.Series(kmeans.labels_).value_counts()
  23.     for num in range(len(quantity)) : #0~1个簇类
  24.         vec_center = vec_center[num]
  25.         length = 200
  26.         distances = []
  27.         res0Series = pd.Series(kmeans.labels_)
  28.         res0 = res0Series[res0Series.values == num]
  29.         res = vecs.iloc[res0.index]
  30.         #res = res.reset_index(drop=True)#71个词
  31.         words_num=len(res)
  32.         res_word=np.array(res)

  33.         for word in range(words_num):#0~171个词
  34.             res = res_word[word]
  35.             dis = 0  # 向量距离
  36.             for index in range(length):#0~200维
  37.                 #计算每一个簇中每一个词在每一维与聚类中心的距离(欧氏距离)
  38.                 dis += (vec_center[index] - res[index]) * (vec_center[index] - res[index])
  39.             dis_ture=np.sqrt(dis)
  40.             distances.append(dis_ture)
  41.         distances = pd.DataFrame(distances, columns=['dis'])
  42.         result = pd.concat([words, labels, distances], axis=1)  # 拼接词语与其对应中心点的距离
  43.         result = result.sort_values(by="dis", ascending=True)  # 按照距离大小进行升序排序


  44. def main():
  45.     # 读取数据集
  46.     dataFile = 'D:/STUDY/1BIYESHEJI/keyword_extraction-master/data/data1.csv'
  47.     articleData = pd.read_csv(dataFile,encoding='utf-8')
  48.     ids, titles, keys = [], [], []

  49.     rootdir = "D:/STUDY/1BIYESHEJI/keyword_extraction-master/result/vecs" # 词向量文件根目录
  50.     fileList = os.listdir(rootdir) #列出文件夹下所有的目录与文件
  51.     # 遍历文件
  52.     for i in range(len(fileList)):
  53.         filename = fileList[i]
  54.         path = os.path.join(rootdir,filename)
  55.         if os.path.isfile(path):
  56.             data = pd.read_csv(path, encoding='utf-8') # 读取词向量文件数据
  57.             #print(data)
  58.             artile_keys = getkeywords_kmeans(data,10) # 聚类算法得到当前文件的关键词
  59.             print(artile_keys)
  60.             # 根据文件名获得文章id以及标题
  61.             (shortname, extension) = os.path.splitext(filename) # 得到文件名和文件扩展名
  62.             t = shortname.split("_")
  63.             article_id = int(t[len(t)-1]) # 获得文章id
  64.             artile_tit = articleData[articleData.id==article_id]['title'] # 获得文章标题
  65.             artile_tit = list(artile_tit)[0] # series转成字符串
  66.             ids.append(article_id)
  67.             titles.append(artile_tit)
  68.             keys.append(artile_keys)
  69.     # 所有结果写入文件
  70.     result = pd.DataFrame({"id": ids, "title": titles, "key": keys}, columns=['id', 'title', 'key'])
  71.     result = result.sort_values(by="id",ascending=True) # 排序
  72.     result.to_csv("D:/STUDY/1BIYESHEJI/keyword_extraction-master/result/news1_keys_word2vec1.csv", encoding="gbk",index=False)

  73. if __name__ == '__main__':
  74.     main()
复制代码
错误显示如下
  1. Traceback (most recent call last):
  2.   File "D:/STUDY/1BIYESHEJI/keyword_extraction-master/wiki_zh_word2vec-master/kmeans.py", line 81, in <module>
  3.     main()
  4.   File "D:/STUDY/1BIYESHEJI/keyword_extraction-master/wiki_zh_word2vec-master/kmeans.py", line 64, in main
  5.     artile_keys = getkeywords_kmeans(data,10) # 聚类算法得到当前文件的关键词
  6.   File "D:/STUDY/1BIYESHEJI/keyword_extraction-master/wiki_zh_word2vec-master/kmeans.py", line 41, in getkeywords_kmeans
  7.     dis += (vec_center[index] - res[index]) * (vec_center[index] - res[index])
  8. IndexError: invalid index to scalar variable.
复制代码
还请大佬们指点

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表