Python如何按规则筛选句子token且保留原有排列顺序?
代码问题分析与优化方案
原有代码的问题
第一段代码
- 三层嵌套循环的判断逻辑存在漏洞:只要句子包含任意一个屏蔽词,且遍历到任意一个不存在于句子中的必填词,就会触发删除逻辑。也就是说只要句子不是包含所有必填词,哪怕已经包含了其中一个必填词,也会被误删,完全不符合规则2的要求。
- 遍历过程中重复删除列表元素,还会导致部分句子被漏判,同一句子匹配多个关键词时也会被重复加入结果列表。
第二段代码
- 列表推导式的判断条件写法错误:
not (i in fact for i in avoid)中的生成器对象布尔值永远为True,导致所有符合规则1的句子都会被过滤掉。 - 先过滤再追加符合规则2的句子,会导致符合规则2的句子被重复添加,自然打乱了原有的句子顺序。
最优实现方案
仅需遍历一次原句子列表即可完成筛选,完全保留原有顺序,逻辑清晰且效率更高:
facts = [] for sent in sentences: # 不包含任意关键词的句子直接跳过 if not any(keyword in sent for keyword in keywords): continue # 包含任意必填词直接保留(规则2优先级更高) if any(essential in sent for essential in essentials): facts.append(sent) continue # 无必填词的情况下,不包含任何屏蔽词则保留(规则1) if not any(avoid_word in sent for avoid_word in avoid): facts.append(sent)
内容的提问来源于stack exchange,提问作者Ashraya Singh
相关产品推荐
相关产品推荐

