50万邮件文本分域检索与查询的python实现(二)

本文详细描述了一种改进的文档处理方法,包括构建目录树、遍历文件深度、编号文档、创建映射及序列化到硬盘的过程。通过递归方式遍历文件,确保所有文档深度被正确识别,并利用pickle模块实现数据持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇里提到了构建目录树的弱智方法,当时只提取了146个人中的2个人作为测试集,也因此就认为所有人文件夹深度都为3。

后来对所有的人文档遍历后,再进行倒排构建的时候程序报错,错误原因是当前生成的路径是一个文件夹。

随后打印了一些信息,发现有的人文档深度远不止3,而有的人文档深度仅为2,所以把程序改了一下,采用递归的方式遍历所有深度的文件:

def find_file(filedir,files):
 for li in os.listdir(filedir):
  if li!='all_documents':
   list=filedir+'/'+li
   if os.path.isfile(list):
    files.append(list+'\r\n')
   else:
    find_file(list,files)
  else:
   pass

接下来,对每一篇文档进行编号,创建了文档-ID,和ID-文档两个映射(一个当然也可以,两个以后读取会更方便),方便以后构建倒排表。

 id=1
 for token in files:
  token_split=token[0:-2]
  id=str(id)
  id_doc[id]=token_split
  doc_id[token_split]=id
  id=int(id)
  id=id+1

再然后,把两个映射从内存导入硬盘里,方便下次重启时直接使用。

利用了pickle模块,pickle可以序列化和反序列化一个对象,主要也就两个函数dump和load,分别对应两个过程。

 mydb1=open('dbase_id_doc','w')
 pickle.dump(id_doc,mydb1)

 mydb2=open('dbase_doc_id','w')
 pickle.dump(doc_id,mydb2)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值