用continue忽略语气词和虚词,本质是在遍历分词结果时遇预设无意义词即跳过本次循环;需先定义停用词集合(含语气词、助词、代词等),将continue置于for循环内判断之后、统计之前,并配合正则清洗或strip处理标点粘连。
用 continue 忽略语气词和虚词,本质是在遍历分词结果时,遇到预设的无意义词就跳过本次循环,不参与计数。关键不是“怎么写 continue”,而是它要放在哪个位置、配合什么条件才真正生效。
明确停用词列表,是 continue 生效的前提
语气词(如“啊”“呢”“吧”“哦”)、结构助词(“的”“地”“得”)、代词(“它”“这”“那”)、连词(“和”“但”“或”)、介词(“在”“对”“于”)等,都属于常见虚词。你需要先定义一个清晰的停用词集合:
- 用列表或集合存储,推荐用 set 提升查找速度(比如
stopwords = {"的", "了", "在", "是", "啊", "呢", "吧", "吗", "哦", "嗯"}) - 注意中英文标点混杂问题:中文句号“。”、逗号“,”、顿号“、”也常混入分词结果,建议一并加入停用词集
- 可额外加长度过滤,比如
len(word) ,避免单字干扰(“我”“人”“国”等虽非虚词,但在通用统计中常需排除)
把 continue 放在 for 循环内部的判断之后
continue 必须紧跟在条件判断后,且位于统计逻辑之前。典型结构如下:
words = jieba.lcut(text)
word_count = {}
for word in words:
if word in stopwords or len(word) < 2:
continue # ← 跳过这一轮,后面 word_count 不执行
word_count[word] = word_count.get(word, 0) + 1
- 如果写成
if not (word in stopwords): word_count[...],就不用 continue,但逻辑易出错;用 continue 更直观、更不易漏掉跳过场景 - 顺序不能颠倒:必须先判断是否该跳过,再做计数。否则虚词已被计入,continue 就失去意义
结合正则清洗,减少分词后残留干扰
有些语气词会带标点粘连,比如“好啊!”“真的吗?”,直接分词可能得到“好啊!”而非“好啊”。这时仅靠 continue 过滤“啊”没用——因为实际匹配的是“啊!”。建议前置清洗:
- 用
re.sub(r'[^\w\u4e00-\u9fff]+', ' ', text)去除所有非中文、非字母数字字符(保留中文、英文字母、数字),再分词 - 或在分词后统一 strip():
word = word.strip('!?.,;:,;:!?\n\t '),再判断是否为空或在停用词中 - 这样能确保 “啊!” → “啊”,才能被
word in stopwords正确捕获
用 Counter 配合列表推导式,让 continue 逻辑更简洁
如果你用 collections.Counter,可以将过滤逻辑提前到生成词列表阶段,代码更紧凑,语义更清晰:
words = jieba.lcut(text) filtered = [w for w in words if w not in stopwords and len(w) > 1] word_counts = Counter(filtered)
- 这里虽没显式写
continue,但列表推导式的if条件起到完全相同的作用:不满足就跳过该元素 - 这种写法可读性高,且天然规避了手动管理字典键值的潜在错误(比如忘记初始化)
- 如需调试,可单独打印
filtered查看哪些词被留下,验证停用词过滤是否合理

















