python TF-IDF算法实现文本关键词提取算法实现文本关键词提取
TF(Term Frequency)词频,在文章中出现次数最多的词,然而文章中出现次数较多的词并不一定就是关键词,比如常见的
对文章本身并没有多大意义的停用词。所以我们需要一个重要性调整系数来衡量一个词是不是常见词。该权重为IDF(Inverse
Document Frequency)逆文档频率,它的大小与一个词的常见程度成反比。在我们得到词频(TF)和逆文档频率(IDF)以
后,将两个值相乘,即可得到一个词的TF-IDF值,某个词对文章的重要性越高,其TF-IDF值就越大,所以排在最前面的几个
词就是文章的关键词。
TF-IDF算法的优点是简单快速,结果比较符合实际情况,但是单纯以“词频”衡量一个词的重要性,不够全面,有时候重要的词
可能出现的次数并不多,而且这种算法无法体现词的位置信息,出现位置靠前的词和出现位置靠后的词,都被视为同样重要,
是不合理的。
TF-IDF算法步骤:算法步骤:
((1)、计算词频:)、计算词频:
词频 = 某个词在文章中出现的次数
考虑到文章有长短之分,考虑到不同文章之间的比较,将词频进行标准化
词频 = 某个词在文章中出现的次数/文章的总词数
词频 = 某个词在文章中出现的次数/该文出现次数最多的词出现的次数
((2)、计算逆文档频率)、计算逆文档频率
需要一个语料库(corpus)来模拟语言的使用环境。
逆文档频率 = log(语料库的文档总数/(包含该词的文档数 + 1))
((3)、计算)、计算TF-IDF
TF-IDF = 词频(TF)* 逆文档频率(IDF)
详细代码如下:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
'''
计算文档的TF-IDF
'''
import codecs
import os
import math
import shutil
#读取文本文件
def readtxt(path):
with codecs.open(path,"r",encoding="utf-8") as f:
content = f.read().strip()
return content
#统计词频
def count_word(content):
word_dic ={}
words_list = content.split("/")
del_word = ["","/s"," ","/n"] for word in words_list:
if word not in del_word:
if word in word_dic:
word_dic[word] = word_dic[word]+1
else:
word_dic[word] = 1
return word_dic
#遍历文件夹
def funfolder(path):
filesArray = [] for root,dirs,files in os.walk(path):
for file in files:
each_file = str(root+"//"+file)