TF-IDF算法的原理:
TF的意思:词频
TF计算方法:
IDF的意思:全文本库中该词的逆文本率
IDF的计算方法:
TF-IDF的算法:
实现过程:
# by miaomiaomiao
'''
函数说明:文本统计
Parameters:
paper_txt:文本
Returns:
txt_formed:统计结果
'''
def txt_forming(paper_txt):
txt_formed={}
for i in paper_txt:
txt_formed[i]=0
for i in paper_txt:
txt_formed[i]+=1
return txt_formed
'''
函数说明:该文本中该词的词频统计
Parameters:
word:该词
paper:该文本
Returns:
tf_value:归一化词频结果
'''
def TF(word,paper):
paper=txt_forming(paper)
times=0
if word in paper:
times+=(paper[word])
all_times=0
for i in paper.values():
all_times+=i
tf_value=times/all_times
return tf_value
'''
函数说明:该词在全文本库中逆文本log指数
Parameters:
word:该词
paper_base:文本集合
log_bottom:将idf值log化底
Returns:
idf_value:归一化词频结果
'''
def IDF(word,paper_base,log_bottom=10):
'''在文本库中每个文本中找该词,如果不在里面就+1'''
n=len(paper_base)
count=0
for i in paper_base:
if word in i:
count+=1
idf_value=math.log(n/(count+1),log_bottom)
return idf_value
'''
函数说明:该文本中该词的词频统计
Parameters:
word:该词
paper:该文本
paper_base:文本集合
log_bottom:将idf值log化底
Returns:
tf_idf_value:TF-IDF值
'''
def TF_IDF(word,paper,paper_base,log_bottom=10):
tf_value=TF(word,paper)
idf_value=IDF(word,paper_base,log_bottom)
tf_idf_value=tf_value*idf_value
# print(tf_value,idf_value)
return tf_idf_value
'''
函数说明:TF-IDF化文本集合
Parameters:
paper_base:文本集合
log_bottom:将idf值log化底
Returns:
datas__TF_IDF:TF-IDF化列表
'''
def tf_idf_base(paper_base,log_bottom=10):
datas__TF_IDF=[]
for paper in papersBase:
tf_idf={}
for word in paper:
tf_idf[word]=TF_IDF(word,paper,paper_base,log_bottom)
datas__TF_IDF.append(tf_idf)
return datas__TF_IDF