python怎么实现TF-IDF算法解析

  介绍

小编给大家分享一下python怎么实现TF-IDF算法解析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

TF-IDF(术语frequency-inverse文档频率)是一种用于信息检索与数据挖掘的常用加权技术。

同样,理论我这里不再赘述,因为和阮一峰大神早在2013年就将TF-IDF用一种非常通俗的方式讲解出来

TF-IDF与余弦相似性的应用(一):自动提取关键词

<强>材料

1。语料库(已分好词)
2。停用词表(哈工大停用词表)3. python3.5

<强>语料库的准备

这里使用的语料库是《人民日报》2015年1月16日至1月18日的发表的新闻,并且在进行TFIDF处理之前已经进行了人工分词(当然也可以使用jieba分词,但效果不好)

三天的新闻篇章数量如下:

 python怎么实现TF-IDF算法解析”>,<br/> </p> <p>语料库中共103篇新闻。每篇新闻存入在txt文件中,编码为utf - 8无BOM </p> <p>这里放一篇文章示例下:<br/> </p> <p> <img src=

我在自己的项目路径下新建一个语料库的文件夹,用于存放已经分好词待计算的语料.corpus文件夹的架构如下:

 python怎么实现TF-IDF算法解析

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   null

python怎么实现TF-IDF算法解析