[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-16":3},{"id":4,"title":5,"title_en":6,"abstract":7,"abstract_en":8,"content":9,"content_en":9,"category":10,"banner_id":11,"banner_path":12,"tags":13,"is_recommend":15,"prev_article":16,"next_article":20,"created_at":24},16,"Go 实现高性能敏感词过滤系统","Go implements high-performance sensitive word filtering system","在内容平台开发中，敏感词过滤是必不可少的功能。传统的字符串替换方法在面对大量敏感词时性能低下，而本文将介绍如何使用 AC 自动机算法实现一个高性能的敏感词过滤系统。## ✨ 核心特性#### 🚀 高性能算法- AC 自动机：基于 Aho-Corasick 算法，时间复杂度 O(n)- 一次扫描：单次遍历即可检测所有敏感词- 内存优化：使用 Trie 树结构，空间效率高  #### 🎯 智能检测- 词边界检测：避免\"草莓\"被\"草\"误判的问题- 正则表达式支持","In content platform development, sensitive word filtering is an indispensable function. Traditional string replacement methods have poor performance when faced with a large number of sensitive words, but this article will introduce how to use AC automata algorithm to implement a high-performance sensitive word filtering system.## Core features ####🎯🚀","> 在内容平台开发中，敏感词过滤是必不可少的功能。传统的字符串替换方法在面对大量敏感词时性能低下，而本文将介绍如何使用 AC 自动机算法实现一个高性能的敏感词过滤系统。\n\n\n## ✨ 核心特性\n#### 🚀 高性能算法\n\n- AC 自动机：基于 Aho-Corasick 算法，时间复杂度 O(n)\n- 一次扫描：单次遍历即可检测所有敏感词\n- 内存优化：使用 Trie 树结构，空间效率高\n  \n#### 🎯 智能检测\n\n- 词边界检测：避免\"草莓\"被\"草\"误判的问题\n- 正则表达式支持：灵活处理手机号、邮箱等模式\n- 中英文混合：支持中文、英文、数字的边界判断\n- \n#### 🔒 并发安全\n\n- 读写锁：支持多协程并发访问\n- 线程安全：生产环境可靠运行\n\n## 🏗️ 系统架构\n\n#### 核心组件\n\n```Go\ntype SensitiveFilter struct {\n    matcher    *cedar.Matcher      \u002F\u002F AC自动机匹配器\n    regexRules map[string]string   \u002F\u002F 正则规则映射\n    mu         sync.RWMutex        \u002F\u002F 读写锁\n}\n\n```\n\n## 工作流程\n\n1. 初始化阶段：从文件加载敏感词，构建 AC 自动机\n2. 检测阶段：使用 AC 自动机快速匹配 + 正则规则补充\n3. 过滤阶段：替换敏感词并保证不重复处理\n\n## 💡 核心实现\n#### 1. AC 自动机构建\n\n```Go\nfunc NewSensitiveFilter() *SensitiveFilter {\n    words := loadWordsFromFile()\n    regexRules := loadRegexRules()\n\n    \u002F\u002F 构建AC自动机\n    m := cedar.NewMatcher()\n    for i, word := range words {\n        m.Insert([]byte(word), i)\n    }\n    m.Compile() \u002F\u002F 编译自动机\n\n    return &amp;SensitiveFilter{\n        matcher:    m,\n        regexRules: regexRules,\n    }\n}\n```\n\n#### 2. 智能词边界检测\n\n```Go\nfunc (f *SensitiveFilter) isWordBoundary(text, word string) bool {\n    index := strings.Index(text, word)\n    if index == -1 {\n        return false\n    }\n\n    \u002F\u002F 检查前边界\n    if index &gt; 0 {\n        prevChar := rune(text[index-1])\n        if f.isWordChar(prevChar) {\n            return false\n        }\n    }\n\n    \u002F\u002F 检查后边界\n    endIndex := index + len(word)\n    if endIndex &gt; len(text) {\n        nextChar := rune(text[endIndex])\n        if f.isWordChar(nextChar) {\n            return false\n        }\n    }\n\n    return true\n}\n\n\n```\n#### 3. 高效过滤算法\n\n\n```Go\nfunc (f *SensitiveFilter) Filter(text string) string {\n    f.mu.RLock()\n    defer f.mu.RUnlock()\n\n    seq := []byte(text)\n    resp := f.matcher.Match(seq)\n    defer resp.Release()\n\n    replaced := make(map[string]struct{})\n    for resp.HasNext() {\n        items := resp.NextMatchItem(seq)\n        for _, itr := range items {\n            wordBytes := f.matcher.Key(seq, itr)\n            word := string(wordBytes)\n\n            if _, exists := replaced[word]; !exists {\n                text = strings.ReplaceAll(text, word, \"########\")\n                replaced[word] = struct{}{}\n            }\n        }\n    }\n\n    \u002F\u002F 正则规则补充\n    for pattern, replacement := range f.regexRules {\n        re := regexp.MustCompile(pattern)\n        text = re.ReplaceAllString(text, replacement)\n    }\n\n    return text\n}\n\n\n```\n## 📊 性能优势\n#### 算法复杂度对比\n\n| 方法 | 时间复杂度|空间复杂度 |适用场景 |\n| - | - | - | - |\n| 暴力匹配|O(n×m×k)  |O(1) | 敏感词少|\n| KMP算法|  O(n×k) | O(m)| 单词匹配|\n| AC自动机|  O(n)  | O(m×k)| 多词匹配|\n\n## 🛡️ 安全特性\n\n#### 1. 正则规则扩展\n```Go\nregexRules := map[string]string{\n    `\\d{11}`:   \"[手机号]\",  \u002F\u002F 手机号脱敏\n    `(?i)test`: \"***\",      \u002F\u002F 不区分大小写\n}\n```\n#### 2. 并发安全保障\n\n```Go\nfunc (f *SensitiveFilter) Check(text string) bool {\n    f.mu.RLock()\n    defer f.mu.RUnlock()\n    \u002F\u002F 安全的并发检测\n}\n```\n## 🚀 使用示例\n\n#### 基础用法\n\n```Go\n\u002F\u002F 初始化过滤器\nfilter := sensitive_ser.NewSensitiveFilter()\n\n\u002F\u002F 检测敏感词\nhasSensitive := filter.Check(\"这是一段测试文本\")\n\n\u002F\u002F 过滤敏感词\ncleanText := filter.Filter(\"这是一段包含敏感词的文本\")\n\n```\n#### 集成到业务系统\n\n```Go\n\u002F\u002F 在聊天系统中使用\nfunc HandleMessage(info ClientInfo, content string) {\n    \u002F\u002F 过滤敏感词\n    filterContent := global.SensitiveFilter.Filter(content)\n    \n    \u002F\u002F 广播清洁内容\n    Broadcast(filterContent)\n}\n```\n\n","Go",35,"https:\u002F\u002Fblog4-1316398321.cos.ap-nanjing.myqcloud.com\u002Fblog5\u002F20260623050840__二次元少女.png",[14],"GO",false,{"id":17,"title":18,"title_en":19},15,"Vue3 + Go 实现第三方 OAuth 登录（GitHub , Microsoft）指南","Vue3 + Go Implement Third-Party OAuth Sign-in (GitHub, Microsoft) Complete Guide",{"id":21,"title":22,"title_en":23},17,"Go + Elasticsearch 实现智能搜索功能","Go + Elasticsearch enables intelligent search","2025-07-29T12:07:42+08:00"]