Bladeren bron

抽取流程

zhangjinkun 6 jaren geleden
bovenliggende
commit
bf600700bb
3 gewijzigde bestanden met toevoegingen van 84 en 4 verwijderingen
  1. 57 0
      src/jy/admin/track/track.go
  2. 10 4
      src/jy/extract/extract.go
  3. 17 0
      src/main_test.go

+ 57 - 0
src/jy/admin/track/track.go

@@ -0,0 +1,57 @@
+// track
+package track
+
+import (
+	db "jy/mongodbutil"
+	qu "qfw/util"
+)
+
+//获取抽取路径
+func GetTrackPath(_id, field, table string) map[string]interface{} {
+	tracks := map[string]interface{}{}      //返回对象
+	fieldvals := []map[string]interface{}{} //抽取结果数组
+	info, _ := db.Mgo.FindById("extract_result", _id, `{"result":1}`)
+	if result, ok := (*info)["result"].(map[string]interface{}); ok {
+		for k, v := range result {
+			if k == field {
+				if tmps, ok := v.([]interface{}); ok {
+					for _, tmp := range tmps {
+						if t, ok := tmp.(map[string]interface{}); ok {
+							fieldvals = append(fieldvals, t)
+						}
+					}
+				}
+				break
+			}
+		}
+	}
+	//获取路径
+	for _, val := range fieldvals {
+		code := qu.ObjToString(val["code"])
+		paths := []map[string]interface{}{}
+		list, _ := db.Mgo.Find(table, `{"sid":"`+_id+`"}`, nil, `{"name":1,"code":1,"type":1,"ruletext":1,"extinfo":1}`, false, -1, -1)
+		for _, info := range *list {
+			fieldobject, _ := info["extinfo"].(map[string]interface{})
+			if fieldvs, ok := fieldobject[field].([]interface{}); ok {
+				for _, v := range fieldvs {
+					if tmp, ok := v.(map[string]interface{}); ok {
+						if code == tmp["code"] {
+							path := map[string]interface{}{
+								"type":      info["type"],
+								"code":      info["code"],
+								"name":      info["name"],
+								"ruletext":  info["ruletext"],
+								"value":     tmp["value"],
+								"extfrom":   tmp["extfrom"],
+								"matchtype": tmp["matchtype"],
+							}
+							paths = append(paths, path)
+						}
+					}
+				}
+			}
+		}
+		tracks[code] = paths
+	}
+	return tracks
+}

+ 10 - 4
src/jy/extract/extract.go

@@ -463,8 +463,8 @@ func getKvByLuaFields(extfrom string, j *ju.Job, in *RegLuaInfo, t map[string][]
 }
 
 //正则提取结果
-func extRegCoreToResult(extfrom, text string, j *ju.Job, v *RegLuaInfo) map[string]interface{} {
-	extinfo := map[string]interface{}{}
+func extRegCoreToResult(extfrom, text string, j *ju.Job, v *RegLuaInfo) map[string][]map[string]interface{} {
+	extinfo := map[string][]map[string]interface{}{}
 	if v.RegCore.Bextract { //正则是两部分的,可以直接抽取的(含下划线)
 		apos := v.RegCore.Reg.FindAllStringSubmatchIndex(text, -1)
 		if len(apos) > 0 {
@@ -475,7 +475,8 @@ func extRegCoreToResult(extfrom, text string, j *ju.Job, v *RegLuaInfo) map[stri
 						continue
 					}
 					val := text[pos[p]:pos[p+1]]
-					extinfo[k] = map[string]interface{}{
+					tmps := []map[string]interface{}{}
+					tmp := map[string]interface{}{
 						"field":     v.Field,
 						"code":      v.Code,
 						"ruletext":  v.RuleText,
@@ -484,6 +485,8 @@ func extRegCoreToResult(extfrom, text string, j *ju.Job, v *RegLuaInfo) map[stri
 						"type":      "regexp",
 						"matchtype": "regcontent",
 					}
+					tmps = append(tmps, tmp)
+					extinfo[k] = tmps
 					if val != "" {
 						if j.Result[v.Field] == nil {
 							j.Result[k] = [](*ju.ExtField){}
@@ -496,7 +499,8 @@ func extRegCoreToResult(extfrom, text string, j *ju.Job, v *RegLuaInfo) map[stri
 	} else {
 		val := v.RegCore.Reg.ReplaceAllString(text, "")
 		if val != "" {
-			extinfo[v.Field] = map[string]interface{}{
+			tmps := []map[string]interface{}{}
+			tmp := map[string]interface{}{
 				"field":     v.Field,
 				"code":      v.Code,
 				"ruletext":  v.RuleText,
@@ -505,6 +509,8 @@ func extRegCoreToResult(extfrom, text string, j *ju.Job, v *RegLuaInfo) map[stri
 				"type":      "regexp",
 				"matchtype": "regcontent",
 			}
+			tmps = append(tmps, tmp)
+			extinfo[v.Field] = tmps
 			if j.Result[v.Field] == nil {
 				j.Result[v.Field] = [](*ju.ExtField){}
 			}

+ 17 - 0
src/main_test.go

@@ -1,6 +1,7 @@
 package main
 
 import (
+	"jy/admin/track"
 	"jy/extract"
 	. "jy/mongodbutil"
 	"log"
@@ -23,3 +24,19 @@ func Test_reg(t *testing.T) {
 		log.Println(k, v[1])
 	}
 }
+func Test_paths(t *testing.T) {
+	Mgo = MgoFactory(1, 3, 120, "192.168.3.207:27082", "extract_v3")
+	tracks := track.GetTrackPath("5b8dd276a5cb26b9b7faaa7c", "projectname", "v3_track")
+	for code, v := range tracks {
+		if tmp, ok := v.([]map[string]interface{}); ok {
+			for k, v := range tmp {
+				if k == 0 {
+					log.Println(v)
+				} else {
+					log.Println(code, v["code"], v["value"])
+				}
+			}
+		}
+		break
+	}
+}