且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

python scikit-learn计算tf-idf词语权重

更新时间:2022-07-02 20:47:40

  Python的scikit-learn包下有计算tf-idf的api,研究了下做个笔记


1 安装scikit-learn包

[python] view plain copy  python scikit-learn计算tf-idf词语权重python scikit-learn计算tf-idf词语权重
  1. sudo pip install scikit-learn  


2 中文分词采用的jieba分词,安装jieba分词包

[python] view plain copy  python scikit-learn计算tf-idf词语权重python scikit-learn计算tf-idf词语权重
  1. sudo pip install jieba  

3  关于jieba分词的使用非常简单,参考这里,关键的语句就是(这里简单试水,不追求效果4 )
[python] view plain copy  python scikit-learn计算tf-idf词语权重python scikit-learn计算tf-idf词语权重
  1. import jieba.posseg as pseg  
  2. words=pseg.cut("对这句话进行分词")  
  3. for key in words:  
  4.      print key.word,key.flag  
输出结果:

对 p
这 r
句 q
话 n
进行 v
分词 n

 

4 采用scikit-learn包进行tf-idf分词权重计算关键用到了两个类:CountVectorizer和TfidfTransformer,具体参见这里

  一个简单的代码如下:

[python] view plain copy  python scikit-learn计算tf-idf词语权重python scikit-learn计算tf-idf词语权重
  1. # coding:utf-8  
  2. __author__ = "liuxuejiang"  
  3. import jieba  
  4. import jieba.posseg as pseg  
  5. import os  
  6. import sys  
  7. from sklearn import feature_extraction  
  8. from sklearn.feature_extraction.text import TfidfTransformer  
  9. from sklearn.feature_extraction.text import CountVectorizer  
  10.   
  11. if __name__ == "__main__":  
  12.     corpus=["我 来到 北京 清华大学",#第一类文本切词后的结果,词之间以空格隔开  
  13.         "他 来到 了 网易 杭研 大厦",#第二类文本的切词结果  
  14.         "小明 硕士 毕业 与 中国 科学院",#第三类文本的切词结果  
  15.         "我 爱 北京 ***"]#第四类文本的切词结果  
  16.     vectorizer=CountVectorizer()#该类会将文本中的词语转换为词频矩阵,矩阵元素a[i][j] 表示j词在i类文本下的词频  
  17.     transformer=TfidfTransformer()#该类会统计每个词语的tf-idf权值  
  18.     tfidf=transformer.fit_transform(vectorizer.fit_transform(corpus))#第一个fit_transform是计算tf-idf,第二个fit_transform是将文本转为词频矩阵  
  19.     word=vectorizer.get_feature_names()#获取词袋模型中的所有词语  
  20.     weight=tfidf.toarray()#将tf-idf矩阵抽取出来,元素a[i][j]表示j词在i类文本中的tf-idf权重  
  21.     for i in range(len(weight)):#打印每类文本的tf-idf词语权重,第一个for遍历所有文本,第二个for便利某一类文本下的词语权重  
  22.         print u"-------这里输出第",i,u"类文本的词语tf-idf权重------"  
  23.         for j in range(len(word)):  
  24.             print word[j],weight[i][j]  
程序输出:每行格式为:词语  tf-idf权重

[plain] view plain copy  python scikit-learn计算tf-idf词语权重python scikit-learn计算tf-idf词语权重
  1. -------这里输出第 0 类文本的词语tf-idf权重------           #该类对应的原文本是:"我来到北京清华大学"  
  2. 中国 0.0  
  3. 北京 0.52640543361  
  4. 大厦 0.0  
  5. *** 0.0  
  6. 小明 0.0  
  7. 来到 0.52640543361  
  8. 杭研 0.0  
  9. 毕业 0.0  
  10. 清华大学 0.66767854461  
  11. 硕士 0.0  
  12. 科学院 0.0  
  13. 网易 0.0  
  14. -------这里输出第 1 类文本的词语tf-idf权重------           #该类对应的原文本是: "他来到了网易杭研大厦"  
  15. 中国 0.0  
  16. 北京 0.0  
  17. 大厦 0.525472749264  
  18. *** 0.0  
  19. 小明 0.0  
  20. 来到 0.414288751166  
  21. 杭研 0.525472749264  
  22. 毕业 0.0  
  23. 清华大学 0.0  
  24. 硕士 0.0  
  25. 科学院 0.0  
  26. 网易 0.525472749264  
  27. -------这里输出第 2 类文本的词语tf-idf权重------           #该类对应的原文本是: "小明硕士毕业于中国科学院“  
  28. 中国 0.4472135955  
  29. 北京 0.0  
  30. 大厦 0.0  
  31. *** 0.0  
  32. 小明 0.4472135955  
  33. 来到 0.0  
  34. 杭研 0.0  
  35. 毕业 0.4472135955  
  36. 清华大学 0.0  
  37. 硕士 0.4472135955  
  38. 科学院 0.4472135955  
  39. 网易 0.0  
  40. -------这里输出第 3 类文本的词语tf-idf权重------            #该类对应的原文本是: "我爱北京***"  
  41. 中国 0.0  
  42. 北京 0.61913029649  
  43. 大厦 0.0  
  44. *** 0.78528827571  
  45. 小明 0.0  
  46. 来到 0.0  
  47. 杭研 0.0  
  48. 毕业 0.0  
  49. 清华大学 0.0  
  50. 硕士 0.0  
  51. 科学院 0.0  
  52. 网易 0.0  
python scikit-learn计算tf-idf词语权重
  注:这里随便举了几个文本,所以tf-idf也没什么实际价值,旨在说明scikit-learn包关于tf-idf计算API的调用