上一篇里提到了构建目录树的弱智方法,当时只提取了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)