Selaa lähdekoodia

1.jsondata
2.金额
3.分包

fengweiqiang 5 vuotta sitten
vanhempi
commit
6b006d76d3

+ 1 - 1
src/jy/clear/tonumber.go

@@ -109,7 +109,7 @@ func ObjToMoney(data []interface{}) []interface{} {
 }
 //["中标金额","成交金额","合同金额","中标价","成交价","成交价格","中标(成交)金额","投标报价","中标标价","成交结果"]
 //["0元","零元","0.0万元","¥0元"]
-var moneyUnitRegBool = regexp.MustCompile(`(中标金额|成交金额|合同金额|中标价|成交价|成交价格|中标\(成交\)金额|投标报价|中标标价|成交结果)?[::\s]?(0元|零元|0.0万元|¥0元|0)+`)
+var moneyUnitRegBool = regexp.MustCompile(`(中标金额|成交金额|合同金额|中标价|成交价|成交价格|中标\(成交\)金额|投标报价|中标标价|成交结果)?[::\s]?(0元|零元|0.0万元|¥0元|0)+[\s]?$`)
 //数字金额转换
 func numMoney(data []interface{}) ([]interface{}, bool) {
 	tmp := fmt.Sprintf("%f",data[0])

+ 2 - 8
src/jy/extract/extpackage.go

@@ -63,24 +63,18 @@ func kvparse(p *ju.JobKv, e *ExtractTask, sonJobResult *map[string]interface{},
 					if data[0] ==0{
 						if istrue,ok:= data[len(data)-1].(bool);istrue&&ok{
 							(*sonJobResult)["budget"] = data[0]
-						}else {
-							continue
 						}
 					}
-					(*sonJobResult)["budget"] = data[0]
 					continue
 				}
 				if qu.Float64All((*sonJobResult)["bidamount"]) == 0 && tags[0].Key == "中标金额" {
 					lock.Lock()
-					cfn := e.ClearFn["budget"]
+					cfn := e.ClearFn["bidamount"]
 					lock.Unlock()
 					data := clear.DoClearFn(cfn, []interface{}{pv[0].Value, ""})
 					if istrue,ok:= data[len(data)-1].(bool);istrue&&ok{
-						(*sonJobResult)["budget"] = data[0]
-					}else {
-						continue
+						(*sonJobResult)["bidamount"] = data[0]
 					}
-					(*sonJobResult)["bidamount"] = data[0]
 					continue
 				}
 				if ((*sonJobResult)["winner"] == nil || (*sonJobResult)["winner"] == "") && tags[0].Key == "中标单位" {

+ 34 - 18
src/jy/extract/extract.go

@@ -797,8 +797,8 @@ func ExtRuleCore(doc map[string]interface{}, e *ExtractTask, vc *RuleCore, j *ju
 				j.Result[k] = [](*ju.ExtField){}
 			}
 			for _, tmp := range v {
-				field := &ju.ExtField{Weight: qu.IntAll(tmp["weight"]),ExtFrom:qu.ObjToString(tmp["extfrom"]), Field: k, Code: qu.ObjToString(tmp["code"]), Type: qu.ObjToString(tmp["type"]), MatchType: qu.ObjToString(tmp["matchtype"]), RuleText: qu.ObjToString(tmp["ruletext"]), SourceValue: tmp["sourcevalue"], Value: tmp["value"]}
-				if k == "bidamount" && field.ExtFrom=="第一候选人"{
+				field := &ju.ExtField{Weight: qu.IntAll(tmp["weight"]), ExtFrom: qu.ObjToString(tmp["extfrom"]), Field: k, Code: qu.ObjToString(tmp["code"]), Type: qu.ObjToString(tmp["type"]), MatchType: qu.ObjToString(tmp["matchtype"]), RuleText: qu.ObjToString(tmp["ruletext"]), SourceValue: tmp["sourcevalue"], Value: tmp["value"]}
+				if k == "bidamount" && field.ExtFrom == "第一候选人" {
 					field.Score = 1
 				}
 				if isSite {
@@ -1041,7 +1041,7 @@ func getKvByLuaFields(vc *RuleCore, j *ju.Job, et *ExtractTask) (map[string][]ma
 	if len(j.Winnerorder) > 1 {
 		if vc.Field == "bidamount" {
 			for _, v := range j.Winnerorder {
-				if v["price"] == nil{
+				if v["price"] == nil {
 					continue
 				}
 				kvmap[vc.Field] = append(kvmap[vc.Field], map[string]interface{}{
@@ -1061,7 +1061,7 @@ func getKvByLuaFields(vc *RuleCore, j *ju.Job, et *ExtractTask) (map[string][]ma
 					"code":        "CL_中标候选人",
 					"field":       vc.Field,
 					"ruletext":    "中标候选人",
-					"extfrom":      j.Winnerorder[0]["sortstr"],
+					"extfrom":     j.Winnerorder[0]["sortstr"],
 					"sourcevalue": price,
 					"value":       price,
 					"type":        "winnerorder",
@@ -1582,22 +1582,38 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
 		tmp["fieldall"] = auxinfo
 		for _, val := range result {
 			for _, v := range val { //取第一个非负数,项目名称除外
+				//存0是否有效
+				if v.Field == "bidamount" || v.Field == "budget" && v.IsTrue {
+					tmp[v.Field] = v.Value
+					break
+				}
 				if v.Score > -1 {
 					tmp[v.Field] = v.Value
 					break
 				} else if v.Field == "projectname" {
 					tmp[v.Field] = v.Value
 					break
-				} else if v.Field == "bidamount" || v.Field == "budget" {
-					if v.IsTrue {
-						tmp[v.Field] = v.Value
-						break
-					}
 				}
 			}
 		}
 		if len(j.PackageInfo) > 0 { //分包信息
 			tmp["package"] = j.PackageInfo
+			var tmpBidamount, tmpBudget float64
+			//包预算,中标金额合并大于抽取就覆盖
+			for _, v := range j.PackageInfo {
+				if v["budget"] != nil {
+					tmpBudget += qu.Float64All(v["budget"])
+				}
+				if v["bidamount"] != nil {
+					tmpBidamount += qu.Float64All(v["bidamount"])
+				}
+			}
+			if qu.Float64All(tmp["budget"]) < tmpBudget {
+				tmp["budget"] = tmpBudget
+			}
+			if qu.Float64All(tmp["bidamount"]) < tmpBidamount {
+				tmp["bidamount"] = tmpBidamount
+			}
 		}
 		if len(j.Winnerorder) > 0 { //候选人信息
 			tmp["winnerorder"] = j.Winnerorder
@@ -2041,20 +2057,20 @@ func resetWinnerorder(j *ju.Job) {
 	//	}
 	//}
 	if maxlen > 0 {
-		winners = append(winners,&ju.ExtField{Code:"winnerorder",Field:"winner",ExtFrom:"j.Winnerorder",Value:j.Winnerorder[0]["entname"],Score:0.5} )
-		if j.Winnerorder[0]["price"]!= nil{
-			bidamounts = append(bidamounts,&ju.ExtField{Code:"winnerorder",Field:"bidamount",ExtFrom:"j.Winnerorder",Value:j.Winnerorder[0]["price"],Score:0.5} )
+		winners = append(winners, &ju.ExtField{Code: "winnerorder", Field: "winner", ExtFrom: "j.Winnerorder", Value: j.Winnerorder[0]["entname"], Score: 0.5})
+		if j.Winnerorder[0]["price"] != nil {
+			bidamounts = append(bidamounts, &ju.ExtField{Code: "winnerorder", Field: "bidamount", ExtFrom: "j.Winnerorder", Value: j.Winnerorder[0]["price"], Score: 0.5})
 		}
 	}
-	if j.Result["winner"] == nil{
+	if j.Result["winner"] == nil && len(winners) > 0 {
 		j.Result["winner"] = winners
-	}else {
-		j.Result["winner"] = append(j.Result["winner"],winners... )
+	} else {
+		j.Result["winner"] = append(j.Result["winner"], winners...)
 	}
-	if j.Result["bidamount"]==nil{
+	if j.Result["bidamount"] == nil && len(bidamounts) > 0 {
 		j.Result["bidamount"] = bidamounts
-	}else {
-		j.Result["bidamount"] =  append(j.Result["bidamount"],bidamounts... )
+	} else {
+		j.Result["bidamount"] = append(j.Result["bidamount"], bidamounts...)
 	}
 	//j.Result["winner"] = winners
 	//中标金额

+ 4 - 3
src/jy/extract/score.go

@@ -115,9 +115,10 @@ func ScoreFields(j *ju.Job, ftag map[string][]*Tag) map[string][]*ju.ExtField {
 		}
 		if field == "budget" || field == "bidamount" {
 			for tmpsindex, tmpsvalue := range tmps {
-				tmps[tmpsindex].Score = -10
-				tmps[tmpsindex].ScoreItem = append(tmps[tmpsindex].ScoreItem, &ju.ScoreItem{Des: field+`value结果含中文直接-10分`, Code: field, Value: tmpsvalue.Value, Score: -10})
-				continue
+				if strings.Contains(tmpsvalue.RuleText,"总") && tmpsvalue.Type =="colon"{
+					tmps[tmpsindex].Score += 1
+					tmps[tmpsindex].ScoreItem = append(tmps[tmpsindex].ScoreItem, &ju.ScoreItem{Des: field+`value结果含总字+1`, Code: field, Value: tmpsvalue.Value, Score:1})
+				}
 			}
 		}
 		locktag.Lock()

+ 16 - 6
src/jy/extract/score_jsondata.go

@@ -29,10 +29,10 @@ func JsonDataMergeProcessing(j *util.Job, e *ExtractTask) map[string][]*util.Ext
 				lockclear.Lock()
 				cfn := e.ClearFn[v]
 				lockclear.Unlock()
-				newNum := clear.DoClearFn(cfn, []interface{}{util2.Float64All((*j.Jsondata)[v]), ""})
+				newNum := clear.DoClearFn(cfn, []interface{}{(*j.Jsondata)[v], ""})
 				if util2.IntAll(newNum[0]) != 0 {
 					extFields := make([]*util.ExtField, 0)
-					extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: 0.1})
+					extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: 0.1,IsTrue:newNum[len(newNum)-1].(bool)})
 					j.Result[v] = extFields
 					//AddExtLog("extract", j.SourceMid, nil, newNum[0], &RegLuaInfo{ "JsonData_"+v, "", v, "", false, nil, nil}, e.TaskInfo) //抽取日志
 					//AddExtLog("clear", j.SourceMid, (*j.Jsondata)[v], newNum[0], &RegLuaInfo{ "JsonData_"+v, "", v, "", false, nil, nil}, e.TaskInfo) //抽取日志
@@ -120,15 +120,26 @@ func JsonDataMergeProcessing(j *util.Job, e *ExtractTask) map[string][]*util.Ext
 			if jdextweight == 0 {
 				continue
 			}
+			oneScore := j.Result[v][0].Score
 			if v == "budget" || v == "bidamount" {
 				lockclear.Lock()
 				cfn := e.ClearFn[v]
 				lockclear.Unlock()
-				newNum := clear.DoClearFn(cfn, []interface{}{util2.Float64All((*j.Jsondata)[v]), ""})
+				newNum := clear.DoClearFn(cfn, []interface{}{(*j.Jsondata)[v], ""})
 				if util2.IntAll(newNum[0]) != 0 {
 					extFields := make([]*util.ExtField, 0)
-					extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: 0.1})
-					j.Result[v] = extFields
+					if jdextweight >1{
+						if oneScore < 0{
+							oneScore =0.1
+						}
+						extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: oneScore+1,IsTrue:newNum[len(newNum)-1].(bool)})
+					}else {
+						if oneScore < 0{
+							oneScore =0.1
+						}
+						extFields = append(extFields, &util.ExtField{Code: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), Field: v, ExtFrom: "JsonData_" + v + "_" + fmt.Sprint(jdextweight), SourceValue: (*j.Jsondata)[v], Value: newNum[0], Score: oneScore,IsTrue:newNum[len(newNum)-1].(bool)})
+					}
+					j.Result[v] = append(j.Result[v], extFields...)
 					//AddExtLog("extract", j.SourceMid, nil, newNum[0], &RegLuaInfo{ "JsonData_"+v, "", v, "", false, nil, nil}, e.TaskInfo) //抽取日志
 					//AddExtLog("clear", j.SourceMid, (*j.Jsondata)[v], newNum[0], &RegLuaInfo{ "JsonData_"+v, "", v, "", false, nil, nil}, e.TaskInfo) //抽取日志
 				}
@@ -137,7 +148,6 @@ func JsonDataMergeProcessing(j *util.Job, e *ExtractTask) map[string][]*util.Ext
 
 			if strings.Trim(util2.ObjToString(j.Result[v][0].Value), " ") != strings.Trim(util2.ObjToString((*j.Jsondata)[v]), " ") {
 				tmp = append(tmp, j.Result[v][0])
-				oneScore := j.Result[v][0].Score
 				if jdextweight == 2 {
 					oneScore += 2
 				}

+ 1 - 1
src/res/fieldscore.json

@@ -43,7 +43,7 @@
             },
             "bidamount": {
                 "table": 3,
-                "colon": 3,
+                "colon": 2,
                 "space": 2,
                 "regexp": 2,
                 "kvweight": 1