|
@@ -315,9 +315,8 @@ func (e *ExtractTask) PreInfo(doc map[string]interface{}) (j, jf *ju.Job, isSite
|
|
|
if subtype == "" {
|
|
|
subtype = "all"
|
|
|
}
|
|
|
- if toptype == "其它" || subtype == "其它" || subtype == "其他" || subtype == "结果变更" {
|
|
|
- toptype = "all"
|
|
|
- subtype = "all"
|
|
|
+ if subtype == "其他" {
|
|
|
+ subtype = "其它"
|
|
|
}
|
|
|
toMap := qu.ObjToMap(doc["jsondata"])
|
|
|
//log.Debug("toMap", toMap)
|
|
@@ -988,6 +987,11 @@ func ExtRuleCoreByReg(extfrom string, doc map[string]interface{}, j *ju.Job, in
|
|
|
if len(extinfo) > 0 {
|
|
|
AddExtLog("extract", j.SourceMid, nil, extinfo, in, et.TaskInfo) //抽取日志
|
|
|
}
|
|
|
+ } else if in.Field == "qualifies" {
|
|
|
+ extinfo := extRegCoreToResult(extfrom,pretreated.HtmlToText(qu.ObjToString(doc[extfrom]) ), &map[string]string{}, j, in, isSite)
|
|
|
+ if len(extinfo) > 0 {
|
|
|
+ AddExtLog("extract", j.SourceMid, nil, extinfo, in, et.TaskInfo) //抽取日志
|
|
|
+ }
|
|
|
} else {
|
|
|
for _, v := range j.Block {
|
|
|
btag := make(map[string]string)
|
|
@@ -1256,16 +1260,48 @@ func getKvByLuaFields(vc *RuleCore, j *ju.Job, et *ExtractTask) (map[string][]ma
|
|
|
if field != vc.Field {
|
|
|
continue
|
|
|
}
|
|
|
- extractFromKv(field, fieldname, j.Block, vc, kvmap)
|
|
|
+ extractFromKv(field, fieldname, j.Block, vc, kvmap, j.Category)
|
|
|
}
|
|
|
AddExtLog("extract", j.SourceMid, nil, kvmap, &RegLuaInfo{Field: vc.Field}, et.TaskInfo) //抽取日志
|
|
|
return kvmap, true
|
|
|
}
|
|
|
|
|
|
-func extractFromKv(field, fieldname string, blocks []*ju.Block, vc *RuleCore, kvmap map[string][]map[string]interface{}) {
|
|
|
+func extractFromKv(field, fieldname string, blocks []*ju.Block, vc *RuleCore, kvmap map[string][]map[string]interface{}, Category string) {
|
|
|
//qu.Debug("fieldname+++", fieldname)
|
|
|
for _, bl := range blocks {
|
|
|
tp := ""
|
|
|
+ if strings.Contains(bl.Title, "保证金") && (field == "bid_bond" || field == "contract_bond") {
|
|
|
+ if text := ju.TrimLRSpace(bl.Text, ""); text != "" {
|
|
|
+ if Category == "招标" || Category == "拟建" || Category == "预告" {
|
|
|
+ kvmap[field] = append(kvmap[field], map[string]interface{}{
|
|
|
+ "code": "CL_块内容",
|
|
|
+ "field": field,
|
|
|
+ "ruletext": "投标保证金",
|
|
|
+ "extfrom": "投标保证金_块内容",
|
|
|
+ "sourcevalue": bl.Text,
|
|
|
+ "value": text,
|
|
|
+ "type": "投标保证金_块内容",
|
|
|
+ "matchtype": "tag_string",
|
|
|
+ "blocktag": bl.Classify,
|
|
|
+ "weight": 0,
|
|
|
+ })
|
|
|
+ } else if Category == "结果" {
|
|
|
+ kvmap[field] = append(kvmap[field], map[string]interface{}{
|
|
|
+ "code": "CL_",
|
|
|
+ "field": field,
|
|
|
+ "ruletext": "履约保证金",
|
|
|
+ "extfrom": "履约保证金_块内容",
|
|
|
+ "sourcevalue": bl.Text,
|
|
|
+ "value": text,
|
|
|
+ "type": "履约保证金_块内容",
|
|
|
+ "matchtype": "tag_string",
|
|
|
+ "blocktag": bl.Classify,
|
|
|
+ "weight": 0,
|
|
|
+ })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
for k, v := range []*ju.JobKv{bl.ColonKV, bl.SpaceKV, bl.TableKV} {
|
|
|
if k == 0 {
|
|
|
tp = "colon"
|
|
@@ -1299,7 +1335,7 @@ func extractFromKv(field, fieldname string, blocks []*ju.Block, vc *RuleCore, kv
|
|
|
}
|
|
|
}
|
|
|
if len(kvmap[field]) == 0 {
|
|
|
- extractFromKv(field, fieldname, bl.Block, vc, kvmap)
|
|
|
+ extractFromKv(field, fieldname, bl.Block, vc, kvmap, Category)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1369,7 +1405,6 @@ func extRegCoreToResult(extfrom, text string, tag *map[string]string, j *ju.Job,
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //fmt.Println(text)
|
|
|
tmps := []map[string]interface{}{}
|
|
|
for i := 0; i < len(apos); i++ {
|
|
|
if strings.TrimSpace(rep[vre.Field+"_"+fmt.Sprint(i)]) != "" {
|
|
@@ -1384,8 +1419,6 @@ func extRegCoreToResult(extfrom, text string, tag *map[string]string, j *ju.Job,
|
|
|
"blocktag": *tag,
|
|
|
"score": score,
|
|
|
}
|
|
|
- tmps = append(tmps, tmp)
|
|
|
-
|
|
|
exfield := ju.ExtField{
|
|
|
BlockTag: *tag,
|
|
|
Field: vre.Field,
|
|
@@ -1396,7 +1429,15 @@ func extRegCoreToResult(extfrom, text string, tag *map[string]string, j *ju.Job,
|
|
|
ExtFrom: extfrom,
|
|
|
SourceValue: rep[vre.Field+"_"+fmt.Sprint(i)],
|
|
|
Value: rep[vre.Field+"_"+fmt.Sprint(i)],
|
|
|
- Score: score}
|
|
|
+ Score: score,
|
|
|
+ }
|
|
|
+ if vre.Field == "qualifies" {
|
|
|
+ if len(rep) >= 2 {
|
|
|
+ tmp["ruletext"] = rep[vre.Field+"_key_"+fmt.Sprint(i)]
|
|
|
+ exfield.RuleText = rep[vre.Field+"_key_"+fmt.Sprint(i)]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tmps = append(tmps, tmp)
|
|
|
if tmp["blocktag"] != nil {
|
|
|
exfield.BlockTag = tmp["blocktag"].(map[string]string)
|
|
|
}
|
|
@@ -1780,7 +1821,37 @@ func AnalysisSaveResult(j, jf *ju.Job, e *ExtractTask) {
|
|
|
if len(*j.Jsondata) > 0 {
|
|
|
tmp["jsondata"] = j.Jsondata
|
|
|
}
|
|
|
- for _, val := range result {
|
|
|
+ for k, val := range result {
|
|
|
+ if k == "qualifies" {
|
|
|
+ squalifies := make([]interface{}, 0)
|
|
|
+ squalifiesMap := make(map[string]*scoreIndex, 0)
|
|
|
+ for _, kv := range val {
|
|
|
+ skey := kv.RuleText
|
|
|
+ if kv.Score > 0 {
|
|
|
+ if squalifiesMap[skey] == nil {
|
|
|
+ squalifiesMap = map[string]*scoreIndex{
|
|
|
+ skey: &scoreIndex{
|
|
|
+ Score: kv.Score,
|
|
|
+ Index: len(squalifies),
|
|
|
+ },
|
|
|
+ }
|
|
|
+ squalifies = append(squalifies, map[string]interface{}{
|
|
|
+ "key": skey,
|
|
|
+ "value": kv.Value,
|
|
|
+ })
|
|
|
+ } else {
|
|
|
+ if squalifiesMap[skey].Score < kv.Score {
|
|
|
+ squalifies[squalifiesMap[skey].Index] = map[string]interface{}{
|
|
|
+ "key": skey,
|
|
|
+ "value": kv.Value,
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ tmp[k] = squalifies
|
|
|
+ continue
|
|
|
+ }
|
|
|
for _, v := range val { //取第一个非负数,项目名称除外
|
|
|
//存0是否有效
|
|
|
if (v.Field == "bidamount" || v.Field == "budget") && v.IsTrue && v.Score > -1 {
|
|
@@ -2111,6 +2182,16 @@ func checkFields(tmp map[string]interface{}) map[string]interface{} {
|
|
|
delete(tmp, "supervisorrate")
|
|
|
}
|
|
|
for k, v := range tmp {
|
|
|
+ if k == "qualifies" {
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ if k == "contract_guarantee" || k == "bid_guarantee" {
|
|
|
+ if len(fmt.Sprint(v)) > 0 {
|
|
|
+ tmp[k] = true
|
|
|
+ } else {
|
|
|
+ delete(tmp, k)
|
|
|
+ }
|
|
|
+ }
|
|
|
if v == "" || len(strings.TrimSpace(fmt.Sprint(v))) == 0 || strings.Contains(fmt.Sprint(v), "**") {
|
|
|
delete(tmp, k)
|
|
|
}
|
|
@@ -2476,3 +2557,8 @@ func RemoveReplicaSliceString(slc []string) []string {
|
|
|
}
|
|
|
return result
|
|
|
}
|
|
|
+
|
|
|
+type scoreIndex struct {
|
|
|
+ Score float64
|
|
|
+ Index int
|
|
|
+}
|