ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

自然语言处理之关键词提取TF-IDF

2019-01-29 17:40:55  阅读:288  来源: 互联网

标签:word keys doc filename TF 词频 IDF freq 自然语言


统计每篇文章重要的词作为这篇文章的关键词,用tf-idf来实现。生产中有很多第三包可以调用,这里记录原理,顺便熟练python

1、公式 :

计算词频TF

考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化。

 

或者

计算反文档频率idf

 

import os
import math
import operator
filepath='H:/data/allfiles/allfiles'
doc_word = dict()
i=0
#统计每篇文章中的词频,及文章总数
for filename in os.listdir(filepath):
    with open(filepath+'/'+filename,'r',encoding='utf-8') as f:
        freq_word = dict()
        for line in f.readlines():
            words = line.strip().split(' ')
            if len(words) == '':
                continue
            for word in words :
                if freq_word.get(word,-1) == -1:
                    freq_word[word] = 1
                else:
                    freq_word[word] += 1
    doc_word[filename] = freq_word
    i += 1
#统计idf
doc_nums = float(i)
doc_freq = dict()
for filename in doc_word.keys():
    for word in doc_word[filename].keys():
        if doc_freq.get(word,-1)==-1:
            doc_freq[word]=1
        else:
            doc_freq[word]+=1
for word in doc_freq.keys():
    doc_freq[word] =math.log(doc_nums/(doc_freq[word]+1))
#TF-IDF
for filename in doc_word.keys():
    word_sorted = sorted(doc_word[filename].items(),key=operator.itemgetter(1),reverse=True)
    for word in doc_word[filename].keys():
        doc_word[filename][word] = doc_word[filename][word]*doc_freq[word]/float(word_sorted[0][1])
    print (doc_word[filename])

 

标签:word,keys,doc,filename,TF,词频,IDF,freq,自然语言
来源: https://www.cnblogs.com/students/p/10334236.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有