Go语言实现敏感词过滤与特殊字符处理

小满
小满
发布时间:2026-10-15| 5人浏览过
原创

本文将介绍如何使用 Golang 编写一个敏感词过滤工具,主要用于检测用户昵称等文本中是否存在敏感内容,并提供剔除特殊转移字符的功能。

实现原理与准备

该工具的核心逻辑是将敏感词库加载到内存 Map 中,随后对输入的文本(如昵称)进行逐字扫描,检查其所有子串是否命中敏感词库。这种方式实现简单,但需要注意时间复杂度约为 O(len(name)^2),适用于对性能要求不极度苛刻的短文本场景。

你可以参考开源项目 fwwdn/sensitive-stop-words 获取常用的敏感词列表。

第1步:定义过滤器结构体

首先定义一个 filter 结构体,用于存储待处理的文本数据以及设定的最大长度限制,以防止超长输入导致性能问题或内存溢出。

package util
 
import (
    "github.com/pkg/errors"
    "strings"
 
)
 
type filter struct {
    data        string
    maxLimitLen int
}

第2步:初始化并校验长度

通过 NewKeywordFilter 构造函数创建实例。在此阶段,程序会检查传入字符串的长度,如果超过预设的最大限制 maxLimitLen,则直接返回错误。

func NewKeywordFilter(str string, maxLimitLen int) (*filter, error) {
    if len(str) > maxLimitLen {
        return nil, errors.Errorf("长度:%d,不能超过:%d", len(str), maxLimitLen)
    }
    return &filter{
        data:        str,
        maxLimitLen: maxLimitLen,
    }, nil
}

第3步:执行敏感词检测

FilterKeywords 方法接收一个布尔类型 Map keywords map[string]bool。程序会通过双重循环遍历当前文本 f.data 的所有可能子串,并在 Map 中进行查找。一旦发现匹配项,即判定为违规。

func (f *filter) FilterKeywords(keywords map[string]bool) (err error) {
    if keywords == nil {
        return
    }
    for i := 0; i < len(f.data); i++ {
        for j := i + 1; j <= len(f.data); j++ {
            subStr := f.data[i:j]
            if _, found := keywords[subStr]; found {
                err = errors.Errorf("昵称违规,建议修改")
            }
        }
    }
    return
}

第4步:剔除特殊转移字符

用户昵称中常包含空格、Emoji 或其他不可见字符。为了确保检测准确,可以先调用 TrimAllCharset 移除这些干扰字符。如果处理后文本为空,则提示错误。

func (f *filter) TrimAllCharset(ch []string) (err error) {
    if ch == nil {
        return
    }
    for _, c := range ch {
        f.data = strings.Replace(f.data, c, "", -1)
    }
    if len(f.data) == 0 {
        err = errors.New("剔除相关转移字符后,数据长度为0.")
        return
    }
    return
}

以上就是Go语言敏感词过滤的实现详细内容,更多关于Go语言字符串处理的内容请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。