1.聚类代码:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @File : 聚类2.py 4 # @Author: 赵路仓 5 # @Date : 2020/3/19 6 # @Desc : 7 # @Contact : [email protected] 8 9 import csv 10 import re 11 import jieba.analyse 12 from sklearn.cluster import KMeans 13 from sklearn.feature_extraction.text import TfidfTransformer 14 from sklearn.feature_extraction.text import CountVectorizer 15 16 labels = [] 17 corpus = [] # 空语料库 18 # 这是三个要处理的文本 csv格式 需要修改 19 f = csv.reader(open("E:/Jingjinji3.csv", ‘r+‘, encoding=‘utf-8‘)) 20 f1 = csv.reader(open("E:/Tianjin3.csv", ‘r+‘, encoding=‘utf-8‘)) 21 f2 = csv.reader(open("E:/Hebei3.csv", ‘r+‘, encoding=‘utf-8‘)) 22 count = 0 23 24 # 三个文件依次读取 25 for i in f: 26 count += 1 27 if count == 1: 28 continue 29 # 成果名称所在的列,从0开始 下面相同,需要修改 30 labels.append(i[1]) 31 # 关键字所在的列 从0开始 下面相同,需要修改 32 corpus.append(i[24]) 33 34 for i in f1: 35 count += 1 36 if count == 1: 37 continue 38 labels.append(i[2]) 39 corpus.append(i[20]) 40 41 for i in f2: 42 count += 1 43 if count == 1: 44 continue 45 labels.append(i[1]) 46 corpus.append(i[19]) 47 48 vectorizer = CountVectorizer() # 该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频 49 transformer = TfidfTransformer() # 该类会统计每个词语的tf-idf权值 50 tfidf = transformer.fit_transform( 51 vectorizer.fit_transform(corpus)) # 第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵 52 weight = tfidf.toarray() # 将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重 53 word = vectorizer.get_feature_names() # 获取词袋模型中的所有词 54 55 for i in range(len(labels)): # 打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重 56 print(u"-------这里输出第", i, u"类文本的词语tf-idf权重------") 57 list = weight[i].tolist() 58 print(word[list.index(max(list))], max(weight[i])) 59 60 # 可以修改,n_clusters 要聚类的类数,n_init 初始化质心的迭代次数 init 选择为随机选取质心 n_jobs并发运行 5 61 mykms = KMeans(n_clusters=100, max_iter=300, n_init=100, 62 init=‘k-means++‘, n_jobs=5) 63 y = mykms.fit_predict(weight) 64 65 # 要写入的文件,可以修改 66 f = csv.writer(open("E:/result.csv", ‘w‘, encoding=‘utf-8‘, newline=‘‘)) 67 f.writerow(["类别", "名称", "领域"]) 68 f = csv.writer(open("E:/result.csv", ‘a+‘, encoding=‘utf-8‘, newline=‘‘)) 69 70 # 标签用0-100的数组区分 71 for i in range(0, 20): 72 label_i = [] 73 for j in range(0, len(y)): 74 if y[j] == i: 75 label_i.append(labels[j]) 76 text = " ".join(label_i) 77 Key = jieba.analyse.extract_tags(text, topK=5) 78 print(Key) 79 print(‘label_‘ + str(i) + ‘:‘, len(label_i), str(label_i)) 80 81 for a in label_i: 82 f.writerow([str(i), a, ‘ ‘.join(Key)])
函数以及用法见代码。
原文地址:https://www.cnblogs.com/zlc364624/p/12548865.html
时间: 2024-10-08 03:51:28