当前位置:   article > 正文

TF-IDF介绍及Python实现文本聚类_python tfidf

python tfidf

TF-IDF 是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中
一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但
同时会随着它在语料库中出现的频率成反比下降。TF-IDF 加权的各种形式常被搜
索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了 TF-IDF 以外,
因特网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果
中出现的顺序。
词频 (term frequency, TF) 指的是某一个给定的词语在该文件中出现的次数。这个数字
通常会被归一化(一般是词频除以文章总词数), 以防止它偏向长的文件。(同一个词语
在长文件里可能会比短文件有更高的词频,而不管该词语重要与否。)

逆向文件频率 (inverse document frequency, IDF) IDF 的主要思想是:如果包含词条 t 的文档
越少, IDF 越大,则说明词条具有很好的类别区分能力。某一特定词语的 IDF,可以由总文件
数目除以包含该词语之文件的数目,再将得到的商取对数得到。

接下来,使用tf-idf方法结合kmeans聚类尝试一个文本聚类实验,使用的为一个json文件,内含文件序号及文本内容。

  1. # python3.6.4
  2. from sklearn import cluster
  3. from sklearn.feature_extraction.text import CountVectorizer
  4. from sklearn.feature_extraction.text import TfidfTransformer
  5. def execute_cluster(tokens_list):
  6. tolist={}
  7. dict=load_array('testdoc.json')
  8. for item in dict:
  9. tolist[item[1]]=item[0]
  10. clusters_list=[]
  11. toklist=[]
  12. toklist2=[]
  13. for stoken in tokens_list: #根据tolist替换原词数字号得到序号--文本词集的矩阵
  14. stopid=stoken['docid']
  15. stoptoken=stoken['tokenids']
  16. strtok=[]
  17. for item in stoptoken:
  18. strtok.append(tolist[item])
  19. toklist.append(' '.join(strtok))
  20. print(toklist) #这里 tolist 需符合传入格式要求
  21. vectorizer = CountVectorizer() #CountVectorizer 会将文本中的词语转换为词频矩阵
  22. cpmat = vectorizer.fit_transform(toklist)
  23. vectorizer.fit(toklist)
  24. word = vectorizer.get_feature_names()
  25. print(word)
  26. #print(cpmat)
  27. transformer = TfidfTransformer() #该类会统计每个词语的 tf-idf 权值
  28. retfidf = transformer.fit_transform(cpmat) #得到文本 tfidf 矩阵
  29. print(retfidf)
  30. tfidf_train=retfidf.toarray() #调整格式方便传入
  31. print(tfidf_train)
  32. km = cluster.KMeans(n_clusters=65, random_state=100,max_iter=500)
  33. #放入上矩阵进行 kmeans 聚类
  34. c=km.fit(tfidf_train)
  35. t = c.labels_ # t 存储每个样本所属的簇
  36. print(t)
  37. print("*******************************")
  38. clusters_list=[] #将结果存入 cluster_list 中
  39. con=0
  40. for tt in t:
  41. cc = {}
  42. topics_list = load_array(train_topics_file)
  43. cc['docid'] = tokens_list[con]['docid']
  44. cc['cluster'] = tt
  45. clusters_list.append(cc)
  46. con+=1
  47. print(clusters_list)
  48. print(type(tokens_list), type(tokens_list[0]), list(tokens_list[0].items())) #仅用于
  49. 验证数据格式
  50. return clusters_list #返回最终聚类结果

 

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

闽ICP备14008679号