123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- //
- 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
- }
- }
|