这段代码主要是加载不同文件下的内容添加至flashtext中的关键词库中,文件很小,却占用20个G内存,如何改写呢? def makeEntityDict(self): # 枚举型实体词典 EntityDict = dict() path = 'entityProject' # level1DirPath = os.listdir(path=path) # level2DirPath = sum([os.listdir(path+'/'+i)for i in level1DirPath],[]) filePathList = [os.path.join(path, i, j) for i in os.listdir(path=path) for j in sum( [os.listdir(path + '/' + i) for i in os.listdir(path=path)], []) if i == j.split('.')[0]] # print(filePathList) for filePathInfo in filePathList: entityType = filePathInfo.split('\\')[-1].split('.')[0] with open(filePathInfo, 'r', encoding='utf-8')as file: for one_line in file: EntityInfo = one_line.strip() # print(one_line.strip(),entityType) if EntityInfo not in EntityDict.keys(): EntityDict[EntityInfo] = entityType keyword_processor = KeywordProcessor() keyword_processor.add_keywords_from_list(list(EntityDict.keys())) return keyword_processor, EntityDict
时间: 2023-02-11 08:16:47 浏览: 159
flashtext:从句子中提取关键字或替换句子中的关键字
这段代码看起来是在加载不同文件中的内容,并将其添加到 flashtext 中的关键词库中。如果文件很小,却占用了 20GB 的内存,可能是因为未正确释放内存或未关闭文件导致的。可以尝试以下优化来减少内存占用:
1. 在读取完文件后立即关闭文件
2. 使用生成器来读取文件,而不是一次性读入整个文件
3. 将 flashtext 的关键词库的内存占用限制在一个合理的范围内
4. 使用 pickle 序列化的方式来存储flashtext中的关键词库。
5. 使用 Python 的垃圾回收机制来释放不再使用的内存
这些都是优化代码的常用方法,具体实现方式取决于具体情况。建议进行更深入的代码分析来确定是哪些操作导致了过多的内存占用。
阅读全文