Python构建NLP倒排索引时字典值列表重复值的去除方法
NLP倒排索引文档ID列表去重方法
你遇到的是构建倒排索引时,同一单词在单篇文档中多次出现导致文档ID重复录入的典型问题,可通过以下几种Python方案实现去重:
方案1:快速实现(适合小体量数据,要求结果按ID排序)
直接利用集合去重后排序,一行代码即可完成:
# 假设你的原始倒排索引存在变量 inverted_index 中 inverted_index = {word: sorted(set(doc_ids)) for word, doc_ids in inverted_index.items()}
运行后直接得到你需要的输出格式:{'man': [1,11], 'upon': [1,3,1539]}
方案2:保序去重(适合需要保留ID首次出现顺序的场景)
如果不需要排序,仅需要去除重复值且保留原有列表的先后顺序,可以用遍历判重的方式实现,时间复杂度为O(n),效率更高:
for word, doc_ids in inverted_index.items(): visited = set() unique_ids = [] for id in doc_ids: if id not in visited: visited.add(id) unique_ids.append(id) inverted_index[word] = unique_ids
前置优化方案(推荐,适合大体量语料)
你可以在构建倒排索引阶段就避免生成重复ID,省掉后续去重开销:
- 处理单篇文档时,先对当前文档的所有单词做去重,再给每个去重后的单词对应的列表添加当前文档ID
- 或者每个单词对应的存储结构先用集合,全部构建完成后再统一转成排序后的列表
内容的提问来源于stack exchange,提问作者David R
相关产品推荐
相关产品推荐

