You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在不删除字符的前提下快速识别带间隔的变形敏感词?

带间隔字符的敏感词匹配优化方案

核心思路:不需要全量预处理移除所有间隔符,仅在匹配阶段跳过非目标字符,只匹配敏感词的字符序列,时间复杂度和普通敏感词匹配接近,不会额外增加过多耗时。


1. 改造DFA/AC自动机匹配逻辑(性能最优,适合大敏感词库场景)

原有匹配逻辑是当前输入字符等于状态机下一个预期字符时才跳转,仅需做小范围改造:

  • 提前定义需要忽略的间隔符哈希集合(比如空格、下划线、短横线等你需要过滤的间隔字符,判断时间复杂度O(1))
  • 匹配时如果读到的当前字符属于间隔符集合,直接跳过当前字符继续读下一位,不改变当前状态机的匹配状态
  • 普通DFA的回退逻辑正常保留即可,不影响原有普通敏感词的匹配效果

示例代码(Python版,可适配任意语言):

# 可自定义需要忽略的间隔符集合
INTERRUPT_CHARS = {' ', '_', '-', '*'}

def match_sensitive(text, sensitive_word, interrupt_chars=INTERRUPT_CHARS):
    s_len = len(sensitive_word)
    if s_len == 0:
        return False
    # 敏感词当前匹配位置指针
    match_ptr = 0
    for char in text:
        if match_ptr >= s_len:
            break
        if char in interrupt_chars:
            continue
        if char == sensitive_word[match_ptr]:
            match_ptr += 1
        else:
            # 普通DFA回退逻辑可自行扩展
            match_ptr = 0
    return match_ptr >= s_len

# 测试效果
print(match_sensitive("exam ple", "example")) # 输出True
print(match_sensitive("exa_mple", "example")) # 输出True

性能说明:整个匹配过程仅遍历文本一次,时间复杂度为O(n)(n为文本长度),和无间隔匹配的耗时几乎一致,远高于先全量删除间隔符再匹配的方案。


2. 动态生成正则匹配规则(实现成本最低,适合小敏感词库场景)

如果敏感词库量级不大,不需要引入复杂的状态机,可直接用正则实现:

  • 对每个敏感词动态生成正则规则,在每个敏感字符之间插入间隔符匹配规则,比如敏感词example生成的正则为e[\s_-]*x[\s_-]*a[\s_-]*m[\s_-]*p[\s_-]*l[\s_-]*e
  • 可根据需求新增大小写忽略、全角半角适配等规则,实现成本极低
  • 缺点是敏感词量级较大时,正则预编译和匹配的性能会弱于DFA方案

内容的提问来源于stack exchange,提问作者Anony Mous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 12:27:03