golang敏感词过滤的实现

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

golang敏感词过滤的实现

liyunlong41   2023-02-02 我要评论

 用golang写了敏感词过滤的工具,主要用来检测用户昵称中是否存在敏感词,同时提供剔除转移字符的功能。

可以先将敏感词库存放在一个map中,敏感词可以参考这里:https://github.com/fwwdn/sensitive-stop-words

将map和昵称传入,程序会检查昵称的每一个子串,判断是否在map敏感词库中。复杂度O(len(name)^2)

package util
 
import (
    "github.com/pkg/errors"
    "strings"
 
)
 
type filter struct {
    data        string
    maxLimitLen int
}
 
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
}
 
func (f *filter) GetData() string {
    return f.data
}
 
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
}
 
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
}

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们