keyword.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package keyword
  2. import (
  3. "encoding/json"
  4. "os"
  5. "regexp"
  6. "time"
  7. "bet24.com/log"
  8. platformconfig "bet24.com/servers/micros/platformconfig/proto"
  9. )
  10. const config_key = "keywords"
  11. const refresh_config_sec = 300
  12. var config_string string
  13. // 屏蔽词列表
  14. var keywordList struct {
  15. Word []string
  16. maps map[string]string
  17. regex *regexp.Regexp
  18. }
  19. var trie = NewTrie()
  20. func Run() {
  21. loadKeywords()
  22. }
  23. func loadKeywords() {
  24. time.AfterFunc(refresh_config_sec*time.Second, loadKeywords)
  25. configString := platformconfig.GetConfig(config_key)
  26. if configString == "" {
  27. data, err := os.ReadFile("fishconf/Keyword.json")
  28. //fmt.Println(string(data))
  29. if err != nil {
  30. log.Release("read config failed fishconf/Keyword.json %v", err)
  31. return
  32. }
  33. configString = string(data)
  34. if configString != "" {
  35. platformconfig.SetConfig(config_key, configString)
  36. }
  37. }
  38. if config_string == configString {
  39. return
  40. }
  41. config_string = configString
  42. err := json.Unmarshal([]byte(configString), &keywordList)
  43. trie = NewTrie()
  44. for _, word := range keywordList.Word {
  45. trie.Insert(word)
  46. }
  47. if err != nil {
  48. log.Release("Unmarshal config failed fishconf/Keyword.json err %v", err)
  49. }
  50. }
  51. // /////////////测试本地加载/////////////////////////////////
  52. func LoadKeywordsLocal() {
  53. configString := ""
  54. if configString == "" {
  55. data, err := os.ReadFile("Keyword.json")
  56. //fmt.Println(string(data))
  57. if err != nil {
  58. log.Release("read config failed fishconf/Keyword.json %v", err)
  59. return
  60. }
  61. configString = string(data)
  62. }
  63. config_string = configString
  64. err := json.Unmarshal([]byte(configString), &keywordList)
  65. for _, word := range keywordList.Word {
  66. trie.Insert(word)
  67. }
  68. if err != nil {
  69. log.Release("Unmarshal config failed fishconf/Keyword.json err %v", err)
  70. }
  71. }
  72. ////////////////////////测试本地加载end////////////////
  73. func ParseKeyword(in string) string {
  74. return FilterSensitiveWords(in, trie)
  75. }
  76. func Dump() {
  77. log.Release("-------------------------------")
  78. log.Release("keyword.dump keyword count = %d", len(keywordList.Word))
  79. defer func() {
  80. log.Release("+++++++++++++++++++++++++++++++")
  81. log.Release("")
  82. }()
  83. for _, v := range keywordList.Word {
  84. log.Release(" %s", v)
  85. }
  86. }