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