|
@@ -200,74 +200,7 @@ func (t *Task) RunMgo() {
|
|
|
}()
|
|
|
tmpTagNameMap := map[string][]string{} //记录标签
|
|
|
tmpPreTagMap := map[string][]string{} //记录父标签
|
|
|
- for _, ru := range t.PRules {
|
|
|
- //全局排除词
|
|
|
- IsMatchGNotKey := RegMatch(tmp, ru.GNW.MatchType, ru.GNW.KeyReg, ru.GNW.NotWordMap)
|
|
|
- if IsMatchGNotKey { //全局排除词匹配成功
|
|
|
- continue
|
|
|
- } else {
|
|
|
- //全局附加词
|
|
|
- IsMatchGAddKey := RegMatch(tmp, ru.GAW.MatchType, ru.GAW.KeyReg, ru.GAW.MatchWordMap)
|
|
|
- if !IsMatchGAddKey && len(ru.GAW.MatchType) != 0 { //全局附加词没有匹配成功
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
- L:
|
|
|
- for _, r := range ru.Rule {
|
|
|
- //排除词
|
|
|
- IsMatchNotKey := RegMatch(tmp, r.NW.MatchType, r.NW.KeyReg, r.NW.NotWordMap)
|
|
|
- if IsMatchNotKey { //排除词匹配成功
|
|
|
- continue
|
|
|
- }
|
|
|
- //L:
|
|
|
- //关键词匹配
|
|
|
- for _, kwm := range r.KW.MatchType {
|
|
|
- if text := qu.ObjToString(tmp[kwm]); text != "" {
|
|
|
- text = ProcessData(text)
|
|
|
- for i, kw_reg := range r.KW.KeyReg {
|
|
|
- IsContinue := false
|
|
|
- if kw_indexArr := kw_reg.FindAllStringIndex(text, -1); len(kw_indexArr) > 0 { //关键词匹配成功
|
|
|
- if r.KW.KeyWordMap[i] && CheckLetter(text, kw_reg, kw_indexArr) { //kw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
- IsContinue = true
|
|
|
- } else if !r.KW.KeyWordMap[i] {
|
|
|
- IsContinue = true
|
|
|
- }
|
|
|
- }
|
|
|
- if IsContinue { //关键词匹配成功,匹配附加词
|
|
|
- if len(r.AW.KeyReg) == 0 { //无附加词
|
|
|
- //tmpTagNameMap[r.TagName] = true
|
|
|
- RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
- break L
|
|
|
- } else {
|
|
|
- for _, awm := range r.AW.MatchType {
|
|
|
- if text := qu.ObjToString(tmp[awm]); text != "" {
|
|
|
- text = ProcessData(text)
|
|
|
- for j, aw_reg := range r.AW.KeyReg {
|
|
|
- if aw_indexArr := aw_reg.FindAllStringIndex(text, -1); len(aw_indexArr) > 0 { //关键词匹配成功
|
|
|
- if r.AW.AddWordMap[j] && CheckLetter(text, aw_reg, aw_indexArr) { //aw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
- //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
- RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
- break L
|
|
|
- } else if !r.AW.AddWordMap[j] {
|
|
|
- //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
- RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
- break L
|
|
|
- }
|
|
|
- }
|
|
|
- // if aw_reg.MatchString(text) { //附加词匹配成功
|
|
|
- // tmpTagName[r.TagName] = true
|
|
|
- // break L
|
|
|
- // }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ GetTags(t.PRules, tmp, tmpTagNameMap, tmpPreTagMap)
|
|
|
clearMap := map[string]interface{}{}
|
|
|
if t.IsClear { //清理
|
|
|
ClearData(clearMap, t.AllTagField, tmpTagNameMap)
|
|
@@ -413,106 +346,71 @@ func (t *Task) RunEs() {
|
|
|
if json.Unmarshal(*tmpHit.Source, &tmp) == nil {
|
|
|
tmpTagNameMap := map[string][]string{} //记录标签
|
|
|
tmpPreTagMap := map[string][]string{} //记录父标签
|
|
|
- for _, ru := range t.PRules {
|
|
|
- //全局排除词
|
|
|
- IsMatchGNotKey := RegMatch(tmp, ru.GNW.MatchType, ru.GNW.KeyReg, ru.GNW.NotWordMap)
|
|
|
- if IsMatchGNotKey { //全局排除词匹配成功
|
|
|
- continue
|
|
|
- } else {
|
|
|
- //全局附加词
|
|
|
- IsMatchGAddKey := RegMatch(tmp, ru.GAW.MatchType, ru.GAW.KeyReg, ru.GAW.MatchWordMap)
|
|
|
- if !IsMatchGAddKey && len(ru.GAW.MatchType) != 0 { //全局附加词没有匹配成功
|
|
|
- continue
|
|
|
- }
|
|
|
- }
|
|
|
- L:
|
|
|
- for _, r := range ru.Rule {
|
|
|
- // IsMatch := false
|
|
|
- // L1:
|
|
|
- // //排除词匹配
|
|
|
- // for _, nwm := range r.NW.MatchType {
|
|
|
- // if text := qu.ObjToString(tmp[nwm]); text != "" {
|
|
|
- // text = ProcessData(text)
|
|
|
- // //i=0时,nw_regArr任意一个匹配表示有排除词
|
|
|
- // //i=1时,nw_regArr所有匹配表示有排除词
|
|
|
- // for i, nw_regArr := range r.NW.KeyReg {
|
|
|
- // andMatchNum := 0
|
|
|
- // for j, nw_reg := range nw_regArr {
|
|
|
- // if nw_indexArr := nw_reg.FindAllStringIndex(text, -1); len(nw_indexArr) > 0 { //排除词匹配成功
|
|
|
- // if r.NW.NotWordMap[i][j] && CheckLetter(text, nw_reg, nw_indexArr) { //nw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
- // andMatchNum++
|
|
|
- // if i == 0 {
|
|
|
- // IsMatch = true
|
|
|
- // break L1
|
|
|
- // } else if i == 1 && len(nw_regArr) == andMatchNum {
|
|
|
- // IsMatch = true
|
|
|
- // break L1
|
|
|
- // }
|
|
|
- // } else if !r.NW.NotWordMap[i][j] {
|
|
|
- // andMatchNum++
|
|
|
- // if i == 0 {
|
|
|
- // IsMatch = true
|
|
|
- // break L1
|
|
|
- // } else if i == 1 && len(nw_regArr) == andMatchNum {
|
|
|
- // IsMatch = true
|
|
|
- // break L1
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- // }
|
|
|
- //排除词
|
|
|
- IsMatchNotKey := RegMatch(tmp, r.NW.MatchType, r.NW.KeyReg, r.NW.NotWordMap)
|
|
|
- if IsMatchNotKey { //排除词匹配成功,过滤当前rule
|
|
|
- continue
|
|
|
- }
|
|
|
- // L:
|
|
|
- //关键词匹配
|
|
|
- for _, kwm := range r.KW.MatchType {
|
|
|
- if text := qu.ObjToString(tmp[kwm]); text != "" {
|
|
|
- text = ProcessData(text)
|
|
|
- for i, kw_reg := range r.KW.KeyReg {
|
|
|
- IsContinue := false
|
|
|
- if kw_indexArr := kw_reg.FindAllStringIndex(text, -1); len(kw_indexArr) > 0 { //关键词匹配成功
|
|
|
- if r.KW.KeyWordMap[i] && CheckLetter(text, kw_reg, kw_indexArr) { //kw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
- IsContinue = true
|
|
|
- } else if !r.KW.KeyWordMap[i] {
|
|
|
- IsContinue = true
|
|
|
- }
|
|
|
- }
|
|
|
- if IsContinue { //关键词匹配成功,匹配附加词
|
|
|
- if len(r.AW.KeyReg) == 0 { //无附加词
|
|
|
- //tmpTagNameMap[r.TagName] = true
|
|
|
- RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
- break L
|
|
|
- } else {
|
|
|
- for _, awm := range r.AW.MatchType {
|
|
|
- if text := qu.ObjToString(tmp[awm]); text != "" {
|
|
|
- text = ProcessData(text)
|
|
|
- for j, aw_reg := range r.AW.KeyReg {
|
|
|
- if aw_indexArr := aw_reg.FindAllStringIndex(text, -1); len(aw_indexArr) > 0 { //关键词匹配成功
|
|
|
- if r.AW.AddWordMap[j] && CheckLetter(text, aw_reg, aw_indexArr) { //aw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
- //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
- RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
- break L
|
|
|
- } else if !r.AW.AddWordMap[j] {
|
|
|
- //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
- RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
- break L
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ GetTags(t.PRules, tmp, tmpTagNameMap, tmpPreTagMap)
|
|
|
+ // for _, ru := range t.PRules {
|
|
|
+ // //全局排除词
|
|
|
+ // IsMatchGNotKey := RegMatch(tmp, ru.GNW.MatchType, ru.GNW.KeyReg, ru.GNW.NotWordMap)
|
|
|
+ // if IsMatchGNotKey { //全局排除词匹配成功
|
|
|
+ // continue
|
|
|
+ // } else {
|
|
|
+ // //全局附加词
|
|
|
+ // IsMatchGAddKey := RegMatch(tmp, ru.GAW.MatchType, ru.GAW.KeyReg, ru.GAW.MatchWordMap)
|
|
|
+ // if !IsMatchGAddKey && len(ru.GAW.MatchType) != 0 { //全局附加词没有匹配成功
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // L:
|
|
|
+ // for _, r := range ru.Rule {
|
|
|
+ // //排除词
|
|
|
+ // IsMatchNotKey := RegMatch(tmp, r.NW.MatchType, r.NW.KeyReg, r.NW.NotWordMap)
|
|
|
+ // if IsMatchNotKey { //排除词匹配成功,过滤当前rule
|
|
|
+ // continue
|
|
|
+ // }
|
|
|
+ // // L:
|
|
|
+ // //关键词匹配
|
|
|
+ // for _, kwm := range r.KW.MatchType {
|
|
|
+ // if text := qu.ObjToString(tmp[kwm]); text != "" {
|
|
|
+ // text = ProcessData(text)
|
|
|
+ // for i, kw_reg := range r.KW.KeyReg {
|
|
|
+ // IsContinue := false
|
|
|
+ // if kw_indexArr := kw_reg.FindAllStringIndex(text, -1); len(kw_indexArr) > 0 { //关键词匹配成功
|
|
|
+ // if r.KW.KeyWordMap[i] && CheckLetter(text, kw_reg, kw_indexArr) { //kw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
+ // IsContinue = true
|
|
|
+ // } else if !r.KW.KeyWordMap[i] {
|
|
|
+ // IsContinue = true
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // if IsContinue { //关键词匹配成功,匹配附加词
|
|
|
+ // if len(r.AW.KeyReg) == 0 { //无附加词
|
|
|
+ // //tmpTagNameMap[r.TagName] = true
|
|
|
+ // RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
+ // break L
|
|
|
+ // } else {
|
|
|
+ // for _, awm := range r.AW.MatchType {
|
|
|
+ // if text := qu.ObjToString(tmp[awm]); text != "" {
|
|
|
+ // text = ProcessData(text)
|
|
|
+ // for j, aw_reg := range r.AW.KeyReg {
|
|
|
+ // if aw_indexArr := aw_reg.FindAllStringIndex(text, -1); len(aw_indexArr) > 0 { //关键词匹配成功
|
|
|
+ // if r.AW.AddWordMap[j] && CheckLetter(text, aw_reg, aw_indexArr) { //aw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
+ // //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
+ // RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
+ // break L
|
|
|
+ // } else if !r.AW.AddWordMap[j] {
|
|
|
+ // //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
+ // RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
+ // break L
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
+ // }
|
|
|
clearMap := map[string]interface{}{}
|
|
|
if t.IsClear { //清理
|
|
|
ClearData(clearMap, t.AllTagField, tmpTagNameMap)
|
|
@@ -932,6 +830,77 @@ func InitRules(tasktype string) (rules []*PRule) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+func GetTags(prules []*PRule, tmp map[string]interface{}, tmpTagNameMap, tmpPreTagMap map[string][]string) {
|
|
|
+ for _, ru := range prules {
|
|
|
+ //全局排除词
|
|
|
+ IsMatchGNotKey := RegMatch(tmp, ru.GNW.MatchType, ru.GNW.KeyReg, ru.GNW.NotWordMap)
|
|
|
+ if IsMatchGNotKey { //全局排除词匹配成功
|
|
|
+ continue
|
|
|
+ } else {
|
|
|
+ //全局附加词
|
|
|
+ IsMatchGAddKey := RegMatch(tmp, ru.GAW.MatchType, ru.GAW.KeyReg, ru.GAW.MatchWordMap)
|
|
|
+ if !IsMatchGAddKey && len(ru.GAW.MatchType) != 0 { //全局附加词没有匹配成功
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ }
|
|
|
+ L:
|
|
|
+ for _, r := range ru.Rule {
|
|
|
+ //排除词
|
|
|
+ IsMatchNotKey := RegMatch(tmp, r.NW.MatchType, r.NW.KeyReg, r.NW.NotWordMap)
|
|
|
+ if IsMatchNotKey { //排除词匹配成功
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ //L:
|
|
|
+ //关键词匹配
|
|
|
+ for _, kwm := range r.KW.MatchType {
|
|
|
+ if text := qu.ObjToString(tmp[kwm]); text != "" {
|
|
|
+ text = ProcessData(text)
|
|
|
+ for i, kw_reg := range r.KW.KeyReg {
|
|
|
+ IsContinue := false
|
|
|
+ if kw_indexArr := kw_reg.FindAllStringIndex(text, -1); len(kw_indexArr) > 0 { //关键词匹配成功
|
|
|
+ if r.KW.KeyWordMap[i] && CheckLetter(text, kw_reg, kw_indexArr) { //kw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
+ IsContinue = true
|
|
|
+ } else if !r.KW.KeyWordMap[i] {
|
|
|
+ IsContinue = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if IsContinue { //关键词匹配成功,匹配附加词
|
|
|
+ if len(r.AW.KeyReg) == 0 { //无附加词
|
|
|
+ //tmpTagNameMap[r.TagName] = true
|
|
|
+ RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
+ break L
|
|
|
+ } else {
|
|
|
+ for _, awm := range r.AW.MatchType {
|
|
|
+ if text := qu.ObjToString(tmp[awm]); text != "" {
|
|
|
+ text = ProcessData(text)
|
|
|
+ for j, aw_reg := range r.AW.KeyReg {
|
|
|
+ if aw_indexArr := aw_reg.FindAllStringIndex(text, -1); len(aw_indexArr) > 0 { //关键词匹配成功
|
|
|
+ if r.AW.AddWordMap[j] && CheckLetter(text, aw_reg, aw_indexArr) { //aw_reg有字母,判断是否是包含关系(AAAIBBB or AI)
|
|
|
+ //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
+ RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
+ break L
|
|
|
+ } else if !r.AW.AddWordMap[j] {
|
|
|
+ //tmpTagNameMap[r.TagName] = true //附加词匹配成功
|
|
|
+ RecordData(ru, tmpTagNameMap, tmpPreTagMap)
|
|
|
+ break L
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // if aw_reg.MatchString(text) { //附加词匹配成功
|
|
|
+ // tmpTagName[r.TagName] = true
|
|
|
+ // break L
|
|
|
+ // }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
//匹配
|
|
|
func RegMatch(tmp map[string]interface{}, matchType []string, matchReg [][]*regexp.Regexp, matchMap []map[int]bool) bool {
|
|
|
defer qu.Catch()
|