介绍
小编给大家分享一下python怎么实现TF-IDF算法解析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
TF-IDF(术语frequency-inverse文档频率)是一种用于信息检索与数据挖掘的常用加权技术。
同样,理论我这里不再赘述,因为和阮一峰大神早在2013年就将TF-IDF用一种非常通俗的方式讲解出来
TF-IDF与余弦相似性的应用(一):自动提取关键词
<强>材料强>
1。语料库(已分好词)
2。停用词表(哈工大停用词表)3. python3.5
<强>语料库的准备强>
这里使用的语料库是《人民日报》2015年1月16日至1月18日的发表的新闻,并且在进行TFIDF处理之前已经进行了人工分词(当然也可以使用jieba分词,但效果不好)
三天的新闻篇章数量如下:
我在自己的项目路径下新建一个语料库的文件夹,用于存放已经分好词待计算的语料.corpus文件夹的架构如下:
2015年1月16日至1月18日,共三天,每天可获取的新闻分了四版,因此针对每一天下的每一版我又分别建了编号为1,2,3,4的文件夹,用于存放每一版的新闻。
其实也没必要这么麻烦,可以直接把所有的新闻都放到一个文件夹下,只是我个人的文件管理习惯。当然放到数据库里面更好。
<强>关于停用词表强>
较好用的停用词表有哈工大停用词表,百度停用词表,川大停用词表,网上一查一大堆。我这里选择的是哈工大停用词表。
代码实现
#, - *安康;编码:utf-8 - * - #,@Date ,,:, 2017 - 04 - 11 09:31:55 #,@Author ,:, Alan Lau (rlalan@outlook.com) #,@Language : Python3.5 import 操作系统 import 编解码器 import 数学 import 运营商 def 乐趣(filepath): #,遍历文件夹中的所有文件,返回文件清单 时间=arr 才能;[] for 根,才能,dirs,, files 拷贝os.walk (filepath): ,,,for fn 拷贝文件: ,,,,,arr.append(根+“\ \“+ fn) return 才能,加勒比海盗 def 扭曲(txt,路径):,#,写入txt文件 f 才能=,codecs.open(路径,& # 39;一个# 39;,,& # 39;use utf8 # 39;) f.write才能(txt) f.close才能() return 才能;路径 def 阅读(路径):#,读取txt文件,并返回列表 f =,开放才能(路径,编码=皍tf8") 时间=data 才能;[] for 才能;line 拷贝f.readlines (): ,,,data.append(线) ,return 数据 def 对待(txtlis): #,将一片文章按照”/& # 39;切割成词表,返回列表 时间=wordlist 才能;[] 时间=alltxt 才能;& # 39;& # 39; for 才能小姐:拷贝txtlis: ,,,alltxt =, alltxt + str(我) ridenter 才能=,alltxt.replace (& # 39; \ n # 39;,, & # 39; & # 39;) 时间=wordlist 才能;ridenter.split (& # 39;/& # 39; ,return 词库 def getstopword(路径):#,获取停用词表 时间=swlis 才能;[] for 才能小姐:拷贝读(路径): ,,,outsw =, str (i) .replace (& # 39; \ n # 39;,, & # 39; & # 39;) ,,,swlis.append (outsw) return swlis才能 def getridofsw (lis), swlist):, #,去除文章中的停用的词 时间=afterswlis 才能;[] for 才能小姐:拷贝lis): ,,,if str (i),拷贝swlist: ,,,,,继续 ,,,: ,,,,,afterswlis.append (str (i)) return afterswlis才能 def freqword (wordlis): #,统计词频,并返回字典 freword 才能=,{} for 才能小姐:拷贝wordlis: ,,,if str (i),拷贝freword: ,,,,,count =, freword (str (i)) ,,,,,freword (str (i)),=,计数+ 1 ,,,: ,,,,,freword (str (i)),=, 1 return freword才能 def 语料库(文件列表,swlist):, #,建立语料库 时间=alllist 才能;[] for 才能小姐:拷贝文件列表: ,,,afterswlis =, getridofsw(对待(读(str (i))), swlist) ,,,alllist.append (afterswlis) return alllist才能 def wordinfilecount(单词,,corpuslist):, #,查出包含该词的文档数 count 才能=,0,#,计数器 for 才能小姐:拷贝corpuslist: ,,,for j 我:拷贝 ,,,,,if word 设置(j):拷贝,#,只要文档出现该词,这计数器加1,所以这里用集合 ,,,,,,,count =,计数+ 1 ,,,,,其他的: ,,,,,,,继续 return 才能;计数 文件列表,def tf_idf (wordlis, corpuslist):, #,计算TF-IDF,并返回字典 outdic 才能=,{} tf 才能=0 idf 才能=0 时间=dic 才能;freqword (wordlis) 时间=outlis 才能;[] for 才能小姐:拷贝设置(wordlis): null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null nullpython怎么实现TF-IDF算法解析