43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
package go_sensitive_word
|
||
|
||
import (
|
||
"errors"
|
||
"github.com/zmexing/go-sensitive-word/filter"
|
||
"github.com/zmexing/go-sensitive-word/store"
|
||
)
|
||
|
||
// Manager 是敏感词过滤系统的核心结构,整合了词库存储和过滤算法
|
||
type Manager struct {
|
||
store.Store // // 词库存储接口(支持内存、本地文件、远程等)
|
||
filter.Filter // // 敏感词匹配算法接口(如 DFA)
|
||
}
|
||
|
||
// NewFilter 初始化过滤器和词库存储
|
||
// 参数:storeOption 指定存储方式,filterOption 指定过滤算法
|
||
func NewFilter(storeOption StoreOption, filterOption FilterOption) (*Manager, error) {
|
||
var filterStore store.Store
|
||
var myFilter filter.Filter
|
||
|
||
switch storeOption.Type {
|
||
case StoreMemory: // 使用内存词库
|
||
filterStore = store.NewMemoryModel()
|
||
default:
|
||
return nil, errors.New("invalid store type")
|
||
}
|
||
|
||
switch filterOption.Type {
|
||
case FilterDfa: // 使用 DFA 算法
|
||
dfaModel := filter.NewDfaModel()
|
||
// 启动监听协程,实时接收新增/删除词的通知
|
||
go dfaModel.Listen(filterStore.GetAddChan(), filterStore.GetDelChan())
|
||
myFilter = dfaModel
|
||
default:
|
||
return nil, errors.New("invalid filter type")
|
||
}
|
||
|
||
return &Manager{
|
||
Store: filterStore,
|
||
Filter: myFilter,
|
||
}, nil
|
||
}
|