python TF-IDF算法实现文本关键词提取
作者:lalalawxt 时间:2022-10-08 16:06:25
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 = ["\r\n","/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)
filesArray.append(each_file)
return filesArray
#计算TF-IDF
def count_tfidf(word_dic,words_dic,files_Array):
word_idf={}
word_tfidf = {}
num_files = len(files_Array)
for word in word_dic:
for words in words_dic:
if word in words:
if word in word_idf:
word_idf[word] = word_idf[word] + 1
else:
word_idf[word] = 1
for key,value in word_dic.items():
if key !=" ":
word_tfidf[key] = value * math.log(num_files/(word_idf[key]+1))
#降序排序
values_list = sorted(word_tfidf.items(),key = lambda item:item[1],reverse=True)
return values_list
#新建文件夹
def buildfolder(path):
if os.path.exists(path):
shutil.rmtree(path)
os.makedirs(path)
print("成功创建文件夹!")
#写入文件
def out_file(path,content_list):
with codecs.open(path,"a",encoding="utf-8") as f:
for content in content_list:
f.write(str(content[0]) + ":" + str(content[1])+"\r\n")
print("well done!")
def main():
#遍历文件夹
folder_path = r"分词结果"
files_array = funfolder(folder_path)
#生成语料库
files_dic = []
for file_path in files_array:
file = readtxt(file_path)
word_dic = count_word(file)
files_dic.append(word_dic)
#新建文件夹
new_folder = r"tfidf计算结果"
buildfolder(new_folder)
#计算tf-idf,并将结果存入txt
i=0
for file in files_dic:
tf_idf = count_tfidf(file,files_dic,files_array)
files_path = files_array[i].split("//")
#print(files_path)
outfile_name = files_path[1]
#print(outfile_name)
out_path = r"%s//%s_tfidf.txt"%(new_folder,outfile_name)
out_file(out_path,tf_idf)
i=i+1
if __name__ == '__main__':
main()
来源:https://blog.csdn.net/lalalawxt/article/details/79499498
标签:python,关键词,提取
0
投稿
猜你喜欢
python mysql项目实战及框架搭建过程
2024-01-21 22:51:50
python statsmodel的使用
2021-04-22 13:38:13
asp使用shotgraph组件生成数字和字母验证码
2007-09-26 12:26:00
使用Python的音乐播放器GUI的实现
2022-03-02 05:02:45
GO语言中回调函数的使用
2024-04-25 15:05:41
asp脚本延时 自定义的delay函数
2008-04-07 12:59:00
Python3 基础语法详解
2023-06-24 06:10:55
使用python的pandas为你的股票绘制趋势图
2023-12-29 19:48:46
SQL Server修改标识列方法 如自增列的批量化修改
2024-01-19 04:59:22
python文件操作相关知识点总结整理
2023-05-09 02:17:42
MSSQL中递归SQL查询语句实例说明-
2024-01-28 19:54:01
python爬取网页版QQ空间,生成各类图表
2023-01-18 06:30:58
Python实现图片拼接的代码
2023-05-30 15:13:42
SQL Server 公用表表达式(CTE)实现递归的方法
2024-01-26 15:20:10
python 中的列表解析和生成表达式
2022-01-30 16:14:15
keras实现VGG16方式(预测一张图片)
2024-01-04 00:36:53
PyCharm License Activation激活码失效问题的解决方法(图文详解)
2021-11-20 12:52:23
Pygame Rect区域位置的使用(图文)
2023-08-14 05:27:48
Microsoft .Net Remoting系列教程之一:.Net Remoting基础篇
2024-05-09 09:03:35
python3转换code128条形码的方法
2021-01-07 07:14:47