1. 程式人生 > >敏感詞過濾golang

敏感詞過濾golang

 用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
}