百度站长反馈,做网站建设小程序,网站虚拟主机免备案,国外公司在国内建网站tf–idf算法python代码实现这是我写的一个tf-idf的简单实现的代码#xff0c;我们知道tfidftf*idf#xff0c;所以可以分别计算tf和idf值在相乘#xff0c;首先我们创建一个简单的语料库#xff0c;作为例子#xff0c;只有四句话#xff0c;每句表示一个文档copus[我正在…tf–idf算法python代码实现这是我写的一个tf-idf的简单实现的代码我们知道tfidftf*idf所以可以分别计算tf和idf值在相乘首先我们创建一个简单的语料库作为例子只有四句话每句表示一个文档copus[我正在学习计算机,它正在吃饭,我的书还在你那儿,今天不上班]由于中文需要分词jieba分词是python里面比较好用的分词工具所以选用jieba分词文末是jieba的链接。首先对文档进行分词import jiebacopus[我正在学习计算机,它正在吃饭,我的书还在你那儿,今天不上班]copus [[word for word in jieba.cut(doc)] for doc in copus]print(copus)输出结果[[我, 正在, 学习, 计算机], [它, 正在, 吃饭], [我, 的, 书, 还, 在, 你, 那儿], [今天, 不, 上班]]文档变成我们想要的格式了然后开始词频统计计算tf值这里用Counter类来把每篇文档都转换成词和词频的字典其实就已经得到tf值了tf []for doc in copus:tf.append(Counter(doc))print(tf)输出结果[Counter({我: 1, 正在: 1, 学习: 1, 计算机: 1}), Counter({它: 1, 正在: 1, 吃饭: 1}), Counter({的: 1, 书: 1, 你: 1, 在: 1, 那儿: 1, 我: 1, 还: 1}), Counter({今天: 1, 不: 1, 上班: 1})]计算idf值import mathfrom collections import defaultdictidf defaultdict(int)for doc in tf:for word in doc:idf[word] 1for word in idf:idf[word] math.log(len(idf)/(idf[word]1))print(idf)输出结果defaultdict(, {的: 2.0149030205422647, 正在: 1.6094379124341003, 学习: 2.0149030205422647, 计算机: 2.0149030205422647, 今天: 2.0149030205422647, 书: 2.0149030205422647, 那儿: 2.0149030205422647, 它: 2.0149030205422647, 不: 2.0149030205422647, 在: 2.0149030205422647, 吃饭: 2.0149030205422647, 我: 1.6094379124341003, 你: 2.0149030205422647, 还: 2.0149030205422647, 上班: 2.0149030205422647})剩下的事情就很简单了只需要把tf和idf相乘就可以了。下面是一个tfidf的实现代码from collections import Counter,defaultdictimport jiebaimport mathdef file2list(file):把文件转换成列表并对数据进行简单的预处理with open(file) as f:corpus f.readlines()corpus [[word.replace(\n,) for word in jieba.cut(line)] for line in corpus if line.strip()]return corpus#c file2list(E:\hei.txt)def get_tf(corpus):return [Counter(doc) for doc in corpus]#用Counter函数把每篇文档转换成词和词频的字典def get_idf(tf_dict):idf defaultdict(int)for doc in tf_dict:for word in doc:idf[word] 1for word in idf:idf[word] math.log(len(idf)/(idf[word]1))#idf的公式return idfdef get_tfidf(doc_id,file):doc_id是语料库中文档的idfile是txt的路径corpus file2list(file)tf get_tf(corpus)idf get_idf(tf)if doc_id len(tf):print(doc_id should smaller than %i%len(tf))else:id_tf tf[doc_id-1]for word in id_tf:id_tf[word] id_tf[word]*idf[word]#计算tfidf值print(id_tf)