golang敏感词过滤的实现
短信预约 -IT技能 免费直播动态提醒
用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
}
到此这篇关于golang敏感词过滤的实现的文章就介绍到这了,更多相关golang敏感词过滤内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341