2021-07-14

该博客探讨了如何通过预先计算并存储IDF值来提高计算速度。作者首先检查是否存在已计算的idf.txt和default_idf.txt文件,如果存在则直接读取,否则遍历文档计算每个词的IDF值,并保存到文件中。这种方法减少了重复计算,优化了性能。

基础工作已经完成的差不多了,但是计算速度还是不理想,经常一次计算要好几分钟,不符合预期,尝试着将IDF值存入文档,下一次使用时直接调用,这样就能大幅度减少重复计算量了。
if os.access("./model/idf.txt", os.F_OK):
file = open(’./model/idf.txt’, mode=‘r’,encoding=‘utf-8’)
file2 = open(’./model/default_idf.txt’, mode=‘r’,encoding=‘utf-8’)
idf_dic = eval(file.read())
default_idf = eval(file2.read())
else:
doc_list = load_data()
idf_dic = {} # idf对应的字典
file = open(’./model/idf.txt’, mode=‘w’,encoding=‘utf-8’) # 打开文件,没有则创建
file2 = open(’./model/default_idf.txt’, mode=‘w’,encoding=‘utf-8’)
tt_count = len(doc_list) # 总文档数
# 每个词出现的文档数
for doc in doc_list:
for word in set(doc):
idf_dic[word] = idf_dic.get(word, 0.0) + 1.0
# 按公式转换为idf值,分母加1进行平滑处理
for k, v in idf_dic.items():
idf_dic[k] = math.log(tt_count / (1.0 + v))
# 对于没有在字典中的词,默认其尽在一个文档出现,得到默认idf值
default_idf = math.log(tt_count / (1.0))
file.write(str(idf_dic))
file2.write(str(default_idf))
return idf_dic, default_idf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值