// package util import ( "log" "os" "qfw/util" "regexp" "sync" "github.com/dlclark/regexp2" ) const ( EXTRACT_Original = iota EXTRACT_Fun EXTRACT_ColonKV EXTRACT_SpaceKV EXTRACT_TableKV EXTRACT_TitleReg EXTRACT_BlockReg EXTRACT_TextReg EXTRACT_PagReg ) //全局配置 var FormatTextMap map[string][]map[string]interface{} var StandardNameMap = map[string]*NodeConfig{} /*单个字段抽取环节配置 正常抽取,只用写配置正则就可以了 对于复杂的抽取,支持用GO写方法,平台直接调用方法 */ type NodeConfig struct { Code string `json:"code"` Field string `json:"field"` Descript string `json:"descript"` DomainMatch string `json:"domainmatch"` PreRegStr []string `json:"prereg"` PreReg []map[*regexp.Regexp]string RegStr []string `json:"reg"` //抽取用得正则 Reg []*ExtractReg PackageRegStr []string `json:"packagereg"` //分包抽取用得正则 PackageReg []*ExtractReg TitleRegStr []string `json:"titlereg"` //抽取用得正则 TitleReg []*ExtractReg EndRegStr string `json:"endreg"` EndReg *regexp.Regexp Fn string `json:"fn"` // Clear []string `json:"clear"` //抽取后用于清理的方法链 //其他配置项,或者限制条件 NeedSave bool `json:"needsave"` // 是否保存 DefaultVal map[string]interface{} `json:"defaultval"` EndFilter []string `json:"endfilter"` EndFilterArray []map[*regexp.Regexp]string //结尾过滤正则 KvEndFilter []string `json:"kvendfilter"` KvEndFilterArray []map[*regexp2.Regexp]string //kv清理过滤正则 TitleEndFilter []string `json:"titlendfilter"` TitleEndFilterArray []map[*regexp2.Regexp]string //kv清理过滤正则 CheckNum bool `json:"checknum"` } type ExtractReg struct { Reg *regexp.Regexp Bextract bool ExtractPos int } /** 分类配置 */ var NodeConfigs map[string] /*分类代码*/ map[string] /*domain代码*/ *NodeConfig //字段抽取配置 var Schemas map[string][]string // var lock sync.Mutex func init() { loadFormatText() } //加载格式化正文配置 func loadFormatText() { FormatTextMap = map[string][]map[string]interface{}{} var formatTextMap map[string]interface{} util.ReadConfig("./res/formattext.json", &formatTextMap) if len(formatTextMap) == 0 { log.Println("formattext.json配置文件中有错误!") os.Exit(0) } for k, v := range formatTextMap { array := v.([]interface{}) arrayMaps := []map[string]interface{}{} for _, ai := range array { a, _ := ai.(map[string]interface{}) reg, _ := a["reg"].(string) if reg == "" { continue } a["reg"] = regexp.MustCompile(reg) arrayMaps = append(arrayMaps, a) } FormatTextMap[k] = arrayMaps } }