config.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. //
  2. package util
  3. import (
  4. "log"
  5. "os"
  6. "qfw/util"
  7. "regexp"
  8. "sync"
  9. "github.com/dlclark/regexp2"
  10. )
  11. const (
  12. EXTRACT_Original = iota
  13. EXTRACT_Fun
  14. EXTRACT_ColonKV
  15. EXTRACT_SpaceKV
  16. EXTRACT_TableKV
  17. EXTRACT_TitleReg
  18. EXTRACT_BlockReg
  19. EXTRACT_TextReg
  20. EXTRACT_PagReg
  21. )
  22. //全局配置
  23. var FormatTextMap map[string][]map[string]interface{}
  24. var StandardNameMap = map[string]*NodeConfig{}
  25. /*单个字段抽取环节配置
  26. 正常抽取,只用写配置正则就可以了
  27. 对于复杂的抽取,支持用GO写方法,平台直接调用方法
  28. */
  29. type NodeConfig struct {
  30. Code string `json:"code"`
  31. Field string `json:"field"`
  32. Descript string `json:"descript"`
  33. DomainMatch string `json:"domainmatch"`
  34. PreRegStr []string `json:"prereg"`
  35. PreReg []map[*regexp.Regexp]string
  36. RegStr []string `json:"reg"` //抽取用得正则
  37. Reg []*ExtractReg
  38. PackageRegStr []string `json:"packagereg"` //分包抽取用得正则
  39. PackageReg []*ExtractReg
  40. TitleRegStr []string `json:"titlereg"` //抽取用得正则
  41. TitleReg []*ExtractReg
  42. EndRegStr string `json:"endreg"`
  43. EndReg *regexp.Regexp
  44. Fn string `json:"fn"` //
  45. Clear []string `json:"clear"` //抽取后用于清理的方法链
  46. //其他配置项,或者限制条件
  47. NeedSave bool `json:"needsave"` // 是否保存
  48. DefaultVal map[string]interface{} `json:"defaultval"`
  49. EndFilter []string `json:"endfilter"`
  50. EndFilterArray []map[*regexp.Regexp]string //结尾过滤正则
  51. KvEndFilter []string `json:"kvendfilter"`
  52. KvEndFilterArray []map[*regexp2.Regexp]string //kv清理过滤正则
  53. TitleEndFilter []string `json:"titlendfilter"`
  54. TitleEndFilterArray []map[*regexp2.Regexp]string //kv清理过滤正则
  55. CheckNum bool `json:"checknum"`
  56. }
  57. type ExtractReg struct {
  58. Reg *regexp.Regexp
  59. Bextract bool
  60. ExtractPos int
  61. }
  62. /**
  63. 分类配置
  64. */
  65. var NodeConfigs map[string] /*分类代码*/ map[string] /*domain代码*/ *NodeConfig //字段抽取配置
  66. var Schemas map[string][]string //
  67. var lock sync.Mutex
  68. func init() {
  69. loadFormatText()
  70. }
  71. //加载格式化正文配置
  72. func loadFormatText() {
  73. FormatTextMap = map[string][]map[string]interface{}{}
  74. var formatTextMap map[string]interface{}
  75. util.ReadConfig("./res/formattext.json", &formatTextMap)
  76. if len(formatTextMap) == 0 {
  77. log.Println("formattext.json配置文件中有错误!")
  78. os.Exit(0)
  79. }
  80. for k, v := range formatTextMap {
  81. array := v.([]interface{})
  82. arrayMaps := []map[string]interface{}{}
  83. for _, ai := range array {
  84. a, _ := ai.(map[string]interface{})
  85. reg, _ := a["reg"].(string)
  86. if reg == "" {
  87. continue
  88. }
  89. a["reg"] = regexp.MustCompile(reg)
  90. arrayMaps = append(arrayMaps, a)
  91. }
  92. FormatTextMap[k] = arrayMaps
  93. }
  94. }