赞
踩
TF-IDF 是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中
一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但
同时会随着它在语料库中出现的频率成反比下降。TF-IDF 加权的各种形式常被搜
索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了 TF-IDF 以外,
因特网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果
中出现的顺序。
词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。这个数字
通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。(同一个词语
在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)
逆向文件频率 (inverse document frequency, IDF) IDF 的主要思想是:如果包含词条 t 的文档
越少, IDF 越大,则说明词条具有很好的类别区分能力。某一特定词语的 IDF,可以由总文件
数目除以包含该词语之文件的数目,再将得到的商取对数得到。
接下来,使用tf-idf方法结合kmeans聚类尝试一个文本聚类实验,使用的为一个json文件,内含文件序号及文本内容。
- # python3.6.4
- from sklearn import cluster
- from sklearn.feature_extraction.text import CountVectorizer
- from sklearn.feature_extraction.text import TfidfTransformer
- def execute_cluster(tokens_list):
- tolist={}
- dict=load_array('testdoc.json')
- for item in dict:
- tolist[item[1]]=item[0]
- clusters_list=[]
- toklist=[]
- toklist2=[]
- for stoken in tokens_list: #根据tolist替换原词数字号得到序号--文本词集的矩阵
- stopid=stoken['docid']
- stoptoken=stoken['tokenids']
- strtok=[]
- for item in stoptoken:
- strtok.append(tolist[item])
- toklist.append(' '.join(strtok))
- print(toklist) #这里 tolist 需符合传入格式要求
- vectorizer = CountVectorizer() #CountVectorizer 会将文本中的词语转换为词频矩阵
- cpmat = vectorizer.fit_transform(toklist)
- vectorizer.fit(toklist)
- word = vectorizer.get_feature_names()
- print(word)
- #print(cpmat)
- transformer = TfidfTransformer() #该类会统计每个词语的 tf-idf 权值
- retfidf = transformer.fit_transform(cpmat) #得到文本 tfidf 矩阵
- print(retfidf)
- tfidf_train=retfidf.toarray() #调整格式方便传入
- print(tfidf_train)
- km = cluster.KMeans(n_clusters=65, random_state=100,max_iter=500)
- #放入上矩阵进行 kmeans 聚类
- c=km.fit(tfidf_train)
- t = c.labels_ # t 存储每个样本所属的簇
- print(t)
- print("*******************************")
- clusters_list=[] #将结果存入 cluster_list 中
- con=0
- for tt in t:
- cc = {}
- topics_list = load_array(train_topics_file)
- cc['docid'] = tokens_list[con]['docid']
- cc['cluster'] = tt
- clusters_list.append(cc)
- con+=1
- print(clusters_list)
- print(type(tokens_list), type(tokens_list[0]), list(tokens_list[0].items())) #仅用于
- 验证数据格式
- return clusters_list #返回最终聚类结果
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。