用python实现tf-idf

tf-idf的基本思想:词语的重要性与它在文件中出现的次数成正比,但同时会随着它在语料库中出现的频率成反比下降。
python中defaultdict用法:创建默认字典,当字典内的key不存在但被查找时,返回的不是keyError而是一个默认值,例如dict=defaultdict(fac),当fac是list时,如果key不存在,返回[]

#coding=utf-8
from collections import defaultdict
import math
import operator
def loadDataSet():
    dataSet=[['I','am','tired'],['working','hard'],['good','good','study']]
    classSet=[1,0,1]
    return dataSet,classSet
def featureSelect(list_words):
    doc_frequency=defaultdict(int)
    for words in list_words:
        for word in words:
            doc_frequency[word]+=1
    word_tf={}
    for i in doc_frequency:
        word_tf[i]=doc_frequency[i]/sum(doc_frequency.values())
    doc_num=len(list_words)
    word_idf={}
    word_doc=defaultdict(int)
    for i in doc_frequency:
        for j in list_words:
            if i in j:
                word_doc[i]+=1
    for i in doc_frequency:
        word_idf[i]=math.log(doc_num/(word_doc[i]+1))
    word_tf_idf={}
    for i in doc_frequency:
        word_tf_idf[i]=word_tf[i]*word_idf[i]

    dict_feature_select=sorted(word_tf_idf.items(),key=operator.itemgetter(1),reverse=True)
    return dict_feature_select
if __name__=='__main__':
    data_list,label_list=loadDataSet()
    features=featureSelect(data_list)
    print(features)
    print(len(features))

python中sum:
sum(iterable[, start])
参数
iterable – 可迭代对象,如:列表、元组、集合。
start – 指定相加的参数,如果没有设置这个值,默认为0。
返回值
返回计算结果。

实例
以下展示了使用 sum 函数的实例:

sum([0,1,2])  
3  
sum((2, 3, 4), 1)        # 元组计算总和后再加 1
10
sum([0,1,2,3,4], 2)      # 列表计算总和后再加 2
12
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值