修改Python NLP函数:添加特定词汇出现次数双重校验条件
修改后的函数实现
我们需要调整原函数逻辑,同时满足两个校验条件:目标词汇总出现次数>2,且每个出现的目标词汇的次数都>2。以下是修改后的代码:
from collections import Counter words = ['good', 'bad', 'excellent','delivery', 'quality','upset','better','poor','refund','fake','cheat','quick','long','scam','cheaper','aluminium'] def func(words, list1): final_list = [] target_words = set(words) # 转集合提升查找效率 for sentence in list1: # 拆分句子并过滤出目标词汇 filtered_words = [word for word in sentence.split() if word in target_words] if not filtered_words: continue # 无目标词汇直接跳过 # 统计每个目标词汇的出现次数 word_count = Counter(filtered_words) # 校验两个核心条件 total_over_2 = sum(word_count.values()) > 2 each_over_2 = all(count > 2 for count in word_count.values()) if total_over_2 and each_over_2: final_list.append(sentence) return final_list # 示例测试调用 test_sentences = [ "I am a good delivery person, but still customers cheat me sometimes.", "I am a good delivery boy, I do good things to people, I don't cheat anyone, yet people are not good to me and cheat me often.", "good good good delivery delivery delivery cheat cheat cheat", "bad bad bad poor poor poor" ] final_list = func(words, test_sentences) print(*final_list, sep='\n\n')
代码逻辑说明
- 用
collections.Counter高效统计目标词汇的出现次数,替代手动计数的冗余逻辑 - 将
words转为集合,大幅提升单词归属判断的效率 - 先过滤出句子中的目标词汇,避免对非目标词汇做无效统计
- 分别校验两个条件:
sum(word_count.values()) > 2:所有目标词汇的总出现次数超过2all(count > 2 for count in word_count.values()):每个出现过的目标词汇,单独出现次数都超过2
- 仅同时满足两个条件的句子,才会被加入结果列表
测试结果说明
- 第一句:总目标词汇数3,但单个词汇出现次数均≤2,不满足条件,不会被选中
- 第二句:good出现3次,但delivery仅1次、cheat仅2次,不满足条件,不会被选中
- 第三句:good、delivery、cheat各出现3次,同时满足两个条件,会被选中
- 第四句:bad、poor各出现3次,同时满足两个条件,会被选中
内容的提问来源于stack exchange,提问作者Srinjoy Sarkar
相关产品推荐
相关产品推荐

