123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- package public
- import (
- "fmt"
- util "app.yhyue.com/moapp/jybase/common"
- )
- var CityConfig map[string]interface{}
- var AreaGet DFA //敏感词
- func init() {
- util.ReadConfig("./city.json", &CityConfig)
- city, _ := CityConfig["city"].([]interface{})
- citys := []string{}
- for _, v := range city {
- citys = append(citys, fmt.Sprint(v))
- }
- AreaGet = DFA{}
- AreaGet.AddWord(citys...)
- }
- type DFA struct {
- Link map[string]interface{}
- }
- func DealString(title string) bool {
- return AreaGet.CheckSensitiveWord(title)
- }
- func (d *DFA) AddWordAll(haskey bool, keys ...string) {
- if d.Link == nil {
- d.Link = make(map[string]interface{})
- }
- for _, key := range keys {
- nowMap := &d.Link
- for i := 0; i < len(key); i++ {
- kc := key[i : i+1]
- if v, ok := (*nowMap)[kc]; ok {
- nowMap, _ = v.(*map[string]interface{})
- } else {
- newMap := map[string]interface{}{}
- newMap["YN"] = "0"
- (*nowMap)[kc] = &newMap
- nowMap = &newMap
- }
- if i == len(key)-1 {
- (*nowMap)["YN"] = "1"
- }
- }
- }
- }
- func (d *DFA) AddWord(keys ...string) {
- d.AddWordAll(true, keys...)
- }
- //适合一次查找
- func (d *DFA) CheckSensitiveWord(src string) bool {
- pos := 0
- nowMap := &d.Link
- res := false
- for i := 0; i < len(src); i++ {
- word := src[i : i+1]
- nowMap, _ = (*nowMap)[word].(*map[string]interface{})
- if nowMap != nil { // 存在,则判断是否为最后一个
- if pos == 0 {
- pos = i
- }
- if "1" == util.ObjToString((*nowMap)["YN"]) { // 如果为最后一个匹配规则,结束循环,返回匹配标识数
- res = true
- pos = 0
- break
- }
- } else {
- nowMap = &d.Link
- if pos > 0 {
- i = pos
- pos = 0
- }
- }
- }
- return res
- }
|