敏感詞過濾golang
阿新 • • 發佈:2018-12-21
用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 }