瀏覽代碼

品牌抽取

unknown 6 年之前
父節點
當前提交
80e6b0949d
共有 5 個文件被更改,包括 354 次插入351 次删除
  1. 4 4
      src/jy/extract/extract.go
  2. 6 9
      src/jy/extract/extractInit.go
  3. 4 0
      src/jy/pretreated/analystep.go
  4. 338 338
      src/jy/pretreated/analytable.go
  5. 2 0
      src/jy/util/util.go

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

@@ -57,8 +57,8 @@ func StartExtractTestTask(taskId, startId, num, resultcoll, trackcoll string) bo
 
 	//品牌抽取
 	if ju.Config["brandgoods"].(bool) {
-		ext.InitBrand()
-		ext.InitGoods()
+		InitBrand()
+		InitGoods()
 	}
 	return RunExtractTestTask(ext, startId, num)
 }
@@ -122,8 +122,8 @@ func StartExtractTaskId(taskId string) bool {
 	ext.InitAuditRecogField()
 
 	//品牌抽取
-	ext.InitBrand()
-	ext.InitGoods()
+	InitBrand()
+	InitGoods()
 
 	ext.IsRun = true
 	go ext.ResultSave()

+ 6 - 9
src/jy/extract/extractInit.go

@@ -85,9 +85,6 @@ type ExtractTask struct {
 	AreaProvinceGet   *ju.DFA //省
 	AreaSimGet        *ju.DFA //市简称
 	AreaStreet        *ju.DFA //街道
-
-	GoodsGet *ju.DFA //商品
-	BrandGet *ju.DFA //品牌
 }
 
 type ClearTaskInfo struct {
@@ -917,13 +914,13 @@ func (c *ClearTask) InitClearLuas() {
 }
 
 //初始化商品
-func (e *ExtractTask) InitGoods() {
-	e.GoodsGet = &ju.DFA{}
-	e.GoodsGet.AddWord(ju.GoodsConfig...)
+func InitGoods() {
+	ju.GoodsGet = &ju.DFA{}
+	ju.GoodsGet.AddWord(ju.GoodsConfig...)
 }
 
 //初始化品牌
-func (e *ExtractTask) InitBrand() {
-	e.BrandGet = &ju.DFA{}
-	e.BrandGet.AddWord(ju.BrandConfig...)
+func InitBrand() {
+	ju.BrandGet = &ju.DFA{}
+	ju.BrandGet.AddWord(ju.BrandConfig...)
 }

+ 4 - 0
src/jy/pretreated/analystep.go

@@ -4,6 +4,7 @@
 package pretreated
 
 import (
+	"fmt"
 	"jy/util"
 	qutil "qfw/util"
 	"strings"
@@ -49,6 +50,7 @@ func AnalyStart(job *util.Job) {
 			t1, _ := ComputeConRatio(bl.Text, 2)
 			if len(t1) > 0 {
 				job.HasTable = 1 //添加标识:文本中有table
+				fmt.Println("分块")
 				tabres := AnalyTableV2(t1, job.Category, bl.Title, bl.Text, 2, job.SourceMid)
 				processTableResult(tabres, bl, job)
 				if bl.Title == "" && tabres.BlockTag != "" {
@@ -67,6 +69,7 @@ func AnalyStart(job *util.Job) {
 			job.HasTable = 1 //添加标识:文本中有table
 			newCon = TextAfterRemoveTable(con)
 			job.BlockPackage = FindPackageFromText(job.Title, newCon)
+			fmt.Println("未分块")
 			tabres := AnalyTableV2(tabs, job.Category, "", con, 1, job.SourceMid)
 			processTableResult(tabres, bl, job)
 			//			for k, v := range bl.TableKV.Kv {
@@ -86,6 +89,7 @@ func AnalyStart(job *util.Job) {
 //分析table解析结果
 func processTableResult(tabres *TableResult, block *util.Block, job *util.Job) {
 	//解析结果中的kv
+	fmt.Println("-------------", tabres.SortKV.Keys)
 	kv := map[string]string{}
 	for k, v := range tabres.SortKV.Map {
 		kv[k] = qutil.ObjToString(v)

+ 338 - 338
src/jy/pretreated/analytable.go

@@ -4,7 +4,7 @@ import (
 	"fmt"
 	u "jy/util"
 	qutil "qfw/util"
-	//	"reflect"
+	"reflect"
 	"regexp"
 	"strings"
 
@@ -547,6 +547,7 @@ func AnalyTableV2(tabs []*goquery.Selection, toptype, blockTag, con string, ityp
 
 //开始解析表格集
 func (ts *TableResult) Analy() {
+	fmt.Println("1111111111111111")
 	tabs := []*Table{}
 	contactFormat := &u.ContactFormat{
 		IndexMap: map[int]string{},
@@ -558,11 +559,11 @@ func (ts *TableResult) Analy() {
 		ts := tn.Analy(contactFormat)
 		for _, tab := range ts {
 			tabs = append(tabs, tab)
-			fmt.Println("tab.SortKV.Map", tab.SortKV.Map)
+			fmt.Println("tab.SortKV.Map", tab.SortKV.Keys)
 		}
 		//tn.SonTables = append(tn.SonTables, tn)
 	}
-	//统一合并,考统一多表格是多包的情况---新增
+	//统一合并,考统一多表格是多包的情况---新增
 	if len(tabs) > 1 {
 		pns := map[string]string{}
 		pnarr := []string{}
@@ -779,7 +780,7 @@ func (table *Table) Analy(contactFormat *u.ContactFormat) []*Table {
 			table.TdContactFormat(contactFormat)
 			//开始查找kv,核心模块
 			table.FindKV()
-			fmt.Println("KvMap----------", table.SortKV.Map)
+			fmt.Println("KvMap----------", table.SortKV.Keys)
 			//table中抽取品牌
 			//table.analyBrand()
 			//判断是否是多包,并处理分包的
@@ -2656,348 +2657,347 @@ L:
 	//	}
 }
 
-//func (table *Table) analyBrand() {
-//	//产品名称 品牌 规格 单价 单位 数量  小计 质保期
-//	lineMap := make(map[string]map[string]string)
-//	lineMapArr := make(map[string]map[string][]string)
-//	brandRule := u.BrandRules
-//	//将val为数组和string的分开
-//	for key, val := range table.SortKV.Map {
-//		key = regReplAllSpace.ReplaceAllString(key, "")
-//		key = strings.Replace(key, "", "", -1) //处理一个特殊的采购量 经上层处理空格后未处理掉
-//		kind := reflect.TypeOf(val).String()
-//		//处理多个key相同的数据
-//		if kind == "[]string" { //val为数组 {"数量":["1","2","3"]}
-//			/*
-//				{
-//					"商品":["","",],
-//					"商品_"["",""],
-//				}
-
-//			*/
-//			realTypeVal := val.([]string)
-//			hasGoods(table, realTypeVal) //判断val中是否含产品
-//			hasBrand(table, realTypeVal) //判断val中是否含品牌
-//			line := underline.FindString(key)
-//			lineValMap := lineMapArr[line]
-//			i := 1
-//		L:
-//			for { //去除数组空数据
-//				last := realTypeVal[len(realTypeVal)-i]
-//				if last == "" {
-//					i++
-//					if i > len(realTypeVal) {
-//						break
-//					}
-//					goto L
-//				} else {
-//					break
-//				}
-//			}
-//			dislodgeNull := realTypeVal[:(len(realTypeVal) - i + 1)] //去除数组中空数据
-//			if len(lineValMap) == 0 && len(realTypeVal) != 0 {       //没有数据
-//				lineMapArr[line] = map[string][]string{key: dislodgeNull}
-//			} else { //新增数据
-//				if len(dislodgeNull) != 0 {
-//					lineValMap[key] = dislodgeNull
-//				}
-//			}
-//		} else if kind == "string" { //val为字符串 {"数量":"1"}
-//			/*
-//				{
-//					"商品:"",名称:"",
-//					"商品_:"",名称_:"",
-//					"商品__:"",名称__:"",
-//				}
-//			*/
+func (table *Table) analyBrand() {
+	fmt.Println("-------", table.BrandData)
+	//产品名称 品牌 规格 单价 单位 数量  小计 质保期
+	lineMap := make(map[string]map[string]string)
+	lineMapArr := make(map[string]map[string][]string)
+	brandRule := u.BrandRules
+	//将val为数组和string的分开
+	for key, val := range table.SortKV.Map {
+		fmt.Println("key:", key, "	val:", val)
+		key = regReplAllSpace.ReplaceAllString(key, "")
+		key = strings.Replace(key, "", "", -1) //处理一个特殊的采购量 经上层处理空格后未处理掉
+		kind := reflect.TypeOf(val).String()
+		//处理多个key相同的数据
+		if kind == "[]string" { //val为数组 {"数量":["1","2","3"]}
+			fmt.Println("=====[]string")
+			/*
+				{
+					"商品":["","",],
+					"商品_"["",""],
+				}
 
-//			realTypeVal := val.(string)
-//			afterFilter := tabletdclear.ReplaceAllString(realTypeVal, "")
-//			if afterFilter == "" { //空val值舍弃
-//				continue
-//			}
-//			hasGoods(table, realTypeVal) //判断val中是否含产品
-//			hasBrand(table, realTypeVal) //判断val中是否含品牌
-//			line := underline.FindString(key)
-//			lineValMap := lineMap[line]
-//			if len(lineValMap) == 0 { //没有数据
-//				lineMap[line] = map[string]string{key: realTypeVal}
-//			} else { //新增数据
-//				lineValMap[key] = realTypeVal
-//			}
-//		}
-//	}
-//	//fmt.Println("lineMapArr------------------------------", lineMapArr)
-//	//fmt.Println("lineMap------------------------------", lineMap)
-//	//处理数组数据后,匹配必须title和替换要保存的title
-//	if len(lineMapArr) > 0 {
-//		for _, aMap := range lineMapArr {
-//			//u.Debug(aMap)
-//			//minNum := 0
-//			maxNum := 0
-//			arrcount := 0                   //记录key是否存在必须title(数组数据)
-//			ka := make(map[string][]string) //最终存储数据
-//			for k0, v0 := range aMap {
-//				//匹配必须title
-//				for nameM, r := range brandRule["must"] {
-//					if convert(k0, r) { //匹配成功
-//						if len(ka[nameM]) != 0 && strings.Contains(k0, "描述") { //防止k0匹配到多次 和特殊情况 物料名称 物料描述同时出现
-//							continue
-//						}
-//						ka[nameM] = v0
-//						arrcount++
-//					}
-//				}
-//				//fmt.Println(arrcount, k0, v0)
-//				//替换其它要保存字段
-//				for nameR, r := range brandRule["replace"] {
-//					if convert(k0, r) { //匹配成功
-//						ka[nameR] = v0
-//					}
-//				}
-//			}
-//			//找最终存储数据的最小len(arr)
-//			//			for _, vf := range ka {
-//			//				//找最短的数组
-//			//				lenVal := len(vf)
-//			//				if minNum == 0 || minNum > lenVal { //maxNum = len(最短数组)
-//			//					minNum = lenVal
-//			//				}
-//			//			}
-//			//找最终存储数据的最大len(arr),小的补空
-//			for _, vf1 := range ka {
-//				lenVal := len(vf1)
-//				if lenVal > maxNum {
-//					maxNum = lenVal
-//				}
-//			}
-//			finishKa := make(map[string][]string)
-//			for vf2K, vf2 := range ka {
-//				if len(vf2) < maxNum {
-//					lenMv := maxNum - len(vf2)
-//					for i := 0; i < lenMv; i++ {
-//						vf2 = append(vf2, "")
-//					}
-//				}
-//				finishKa[vf2K] = vf2
-//			}
-//			hasKey(table, arrcount) //是否匹配到两个以上的key
-//			if arrcount >= 1 {
-//				finishData := dealArrData(maxNum, finishKa)
-//				table.BrandData = append(table.BrandData, finishData)
-//			}
-//		}
-//	}
-//	//处理string数据后,匹配必须title和替换要保存的title
-//	if len(lineMap) > 0 {
-//		for _, sMap := range lineMap {
-//			strcount := 0 //记录key是否存在必须title(字符串数据)
-//			//fmt.Println("---------------", sMap)
-//			endStrMap := make(map[string]string)
-//			for k1, v1 := range sMap {
-//				//匹配必须title
-//				for nameM, r := range brandRule["must"] {
-//					if convert(k1, r) { //匹配成功
-//						endStrMap[nameM] = v1
-//						strcount++
-//						//fmt.Println(strcount, k1, v1)
-//					}
-//				}
-//				//替换其它要保存字段
-//				for nameR, r := range brandRule["replace"] {
-//					if convert(k1, r) { //匹配成功
-//						endStrMap[nameR] = v1
-//					}
-//				}
-//			}
-//			//原始字符串数据处理
-//			hasKey(table, strcount) //是否匹配到两个以上的key
-//			if strcount >= 1 {
-//				finishData := dealStrData(endStrMap)
-//				table.BrandData = append(table.BrandData, finishData)
-//			}
-//		}
-//	}
-//	//fmt.Println("finish---", table.BrandData)
-//}
+			*/
+			realTypeVal := val.([]string)
+			hasGoods(table, realTypeVal) //判断val中是否含产品
+			hasBrand(table, realTypeVal) //判断val中是否含品牌
+			line := underline.FindString(key)
+			lineValMap := lineMapArr[line]
+			i := 1
+		L:
+			for { //去除数组空数据
+				last := realTypeVal[len(realTypeVal)-i]
+				if last == "" {
+					i++
+					if i > len(realTypeVal) {
+						break
+					}
+					goto L
+				} else {
+					break
+				}
+			}
+			dislodgeNull := realTypeVal[:(len(realTypeVal) - i + 1)] //去除数组中空数据
+			if len(lineValMap) == 0 && len(realTypeVal) != 0 {       //没有数据
+				lineMapArr[line] = map[string][]string{key: dislodgeNull}
+			} else { //新增数据
+				if len(dislodgeNull) != 0 {
+					lineValMap[key] = dislodgeNull
+				}
+			}
+		} else if kind == "string" { //val为字符串 {"数量":"1"}
+			fmt.Println("=====string")
+			/*
+				{
+					"商品:"",名称:"",
+					"商品_:"",名称_:"",
+					"商品__:"",名称__:"",
+				}
+			*/
 
-//func dealArrData(minNum int, ka map[string][]string) []map[string]string {
-//	for k2, v2 := range ka {
-//		//处理数组长度不相等,使长度一致
-//		if len(v2) > minNum {
-//			ka[k2] = v2[:minNum]
-//		}
-//	}
-//	finalData := assembleData(ka)
-//	if len(finalData) > 0 {
-//		return finalData
-//	}
-//	return nil
+			realTypeVal := val.(string)
+			afterFilter := tabletdclear.ReplaceAllString(realTypeVal, "")
+			if afterFilter == "" { //空val值舍弃
+				continue
+			}
+			hasGoods(table, realTypeVal) //判断val中是否含产品
+			hasBrand(table, realTypeVal) //判断val中是否含品牌
+			line := underline.FindString(key)
+			lineValMap := lineMap[line]
+			if len(lineValMap) == 0 { //没有数据
+				lineMap[line] = map[string]string{key: realTypeVal}
+			} else { //新增数据
+				lineValMap[key] = realTypeVal
+			}
+			fmt.Println("lineValMap===", lineValMap)
+		}
+	}
+	//fmt.Println("lineMapArr------------------------------", lineMapArr)
+	//fmt.Println("lineMap------------------------------", lineMap)
+	//处理数组数据后,匹配必须title和替换要保存的title
+	if len(lineMapArr) > 0 {
+		for _, aMap := range lineMapArr {
+			//u.Debug(aMap)
+			//minNum := 0
+			maxNum := 0
+			arrcount := 0                   //记录key是否存在必须title(数组数据)
+			ka := make(map[string][]string) //最终存储数据
+			for k0, v0 := range aMap {
+				//匹配必须title
+				for nameM, r := range brandRule["must"] {
+					if convert(k0, r) { //匹配成功
+						if len(ka[nameM]) != 0 && strings.Contains(k0, "描述") { //防止k0匹配到多次 和特殊情况 物料名称 物料描述同时出现
+							continue
+						}
+						ka[nameM] = v0
+						arrcount++
+					}
+				}
+				//fmt.Println(arrcount, k0, v0)
+				//替换其它要保存字段
+				for nameR, r := range brandRule["replace"] {
+					if convert(k0, r) { //匹配成功
+						ka[nameR] = v0
+					}
+				}
+			}
+			//找最终存储数据的最小len(arr)
+			//			for _, vf := range ka {
+			//				//找最短的数组
+			//				lenVal := len(vf)
+			//				if minNum == 0 || minNum > lenVal { //maxNum = len(最短数组)
+			//					minNum = lenVal
+			//				}
+			//			}
+			//找最终存储数据的最大len(arr),小的补空
+			for _, vf1 := range ka {
+				lenVal := len(vf1)
+				if lenVal > maxNum {
+					maxNum = lenVal
+				}
+			}
+			finishKa := make(map[string][]string)
+			for vf2K, vf2 := range ka {
+				if len(vf2) < maxNum {
+					lenMv := maxNum - len(vf2)
+					for i := 0; i < lenMv; i++ {
+						vf2 = append(vf2, "")
+					}
+				}
+				finishKa[vf2K] = vf2
+			}
+			hasKey(table, arrcount) //是否匹配到两个以上的key
+			if arrcount >= 1 {
+				finishData := dealArrData(maxNum, finishKa)
+				table.BrandData = append(table.BrandData, finishData)
+			}
+		}
+	}
+	//处理string数据后,匹配必须title和替换要保存的title
+	if len(lineMap) > 0 {
+		for _, sMap := range lineMap {
+			strcount := 0 //记录key是否存在必须title(字符串数据)
+			//fmt.Println("---------------", sMap)
+			endStrMap := make(map[string]string)
+			for k1, v1 := range sMap {
+				//匹配必须title
+				for nameM, r := range brandRule["must"] {
+					if convert(k1, r) { //匹配成功
+						endStrMap[nameM] = v1
+						strcount++
+						//fmt.Println(strcount, k1, v1)
+					}
+				}
+				//替换其它要保存字段
+				for nameR, r := range brandRule["replace"] {
+					if convert(k1, r) { //匹配成功
+						endStrMap[nameR] = v1
+					}
+				}
+			}
+			//原始字符串数据处理
+			hasKey(table, strcount) //是否匹配到两个以上的key
+			if strcount >= 1 {
+				finishData := dealStrData(endStrMap) //处理数据
+				if len(finishData) > 0 {
+					table.BrandData = append(table.BrandData, finishData)
+				}
+			}
+		}
+	}
+	fmt.Println("finish---", table.BrandData)
+}
 
-//}
-//func dealStrData(kv map[string]string) []map[string]string {
-//	finalData := assembleData(kv)
-//	if len(finalData) > 0 {
-//		return finalData
-//	}
-//	return nil
+func dealArrData(minNum int, ka map[string][]string) []map[string]string {
+	for k2, v2 := range ka {
+		//处理数组长度不相等,使长度一致
+		if len(v2) > minNum {
+			ka[k2] = v2[:minNum]
+		}
+	}
+	finalData := assembleData(ka)
+	if len(finalData) > 0 {
+		return finalData
+	}
+	return nil
 
-//}
+}
+func dealStrData(kv map[string]string) []map[string]string {
+	finalData := []map[string]string{}
+	finalData = assembleData(kv)
+	return finalData
 
-////组装数据,每一行的数据为一数据集合
-//func assembleData(m interface{}) []map[string]string {
-//	defer qutil.Catch()
-//	/*
-//		{
-//			"itemname":["计算机","打印机","机柜"],
-//			"number"  :["1","12","4"]
-//		}
-//	*/
-//	datas := []map[string]string{}
-//	switch reflect.TypeOf(m).String() {
-//	case "map[string][]string": //数组数据
-//		realTypeM := m.(map[string][]string)
-//		//根据数组数据的顺序 将多个数组中索引相同的数据拼装成一个map,并将这多个map放入一个arr
-//		/*
-//			arr1 ["a1","b1","c1"]
-//			arr2 ["a2","b2","c2"]
+}
 
-//			[
-//				{"a1","a2"},
-//				{"b1","b2"},
-//				{"c1","c2"}
-//			]
-//		*/
-//		//start
-//		for k3, v3 := range realTypeM {
-//			for _, val := range v3 {
-//				data := make(map[string]string)
-//				data[k3] = val
-//				datas = append(datas, data)
-//			}
-//			break
-//		}
-//		for i, data := range datas {
-//			for k4, v4 := range realTypeM {
-//				if i < len(v4) { //数组数据长度不一致
-//					if v4[i] != " " {
-//						data[k4] = v4[i]
-//					} else {
-//						delete(data, k4)
-//						continue
-//					}
-//				} else {
-//					fmt.Println("err table")
-//					continue
-//				}
-//			}
-//			datas[i] = data
-//		}
-//		//end
-//		for _, fdv := range datas { //清除空数据和只含特殊符号的数据
-//			for fmk, fmv := range fdv {
-//				if tabletdclear.ReplaceAllString(fmv, "") == "" {
-//					delete(fdv, fmk)
-//				}
-//			}
-//		}
-//	case "map[string]string": //字符串数据
-//		realTypeM := m.(map[string]string)
-//		datas = append(datas, realTypeM)
-//	default:
-//	}
-//	return datas
-//}
+//组装数据,每一行的数据为一数据集合
+func assembleData(m interface{}) []map[string]string {
+	defer qutil.Catch()
+	/*
+		{
+			"itemname":["计算机","打印机","机柜"],
+			"number"  :["1","12","4"]
+		}
+	*/
+	datas := []map[string]string{}
+	switch reflect.TypeOf(m).String() {
+	case "map[string][]string": //数组数据
+		realTypeM := m.(map[string][]string)
+		//根据数组数据的顺序 将多个数组中索引相同的数据拼装成一个map,并将这多个map放入一个arr
+		/*
+			arr1 ["a1","b1","c1"]
+			arr2 ["a2","b2","c2"]
 
-//func convert(key, r string) bool {
-//	flag := false
-//	//fmt.Println("key1---", key)
-//	key = tabletitleclear.ReplaceAllString(key, "")
-//	//fmt.Println("key2---", key)
-//	reg, err := regexp.Compile(r)
-//	if err != nil {
-//		fmt.Println("reg err:", err)
-//		return flag
-//	}
-//	flag = reg.MatchString(key)
-//	//fmt.Println(key, "	", r, "	", flag)
-//	return flag
-//}
+			[
+				{"a1","a2"},
+				{"b1","b2"},
+				{"c1","c2"}
+			]
+		*/
+		//start
+		for k3, v3 := range realTypeM {
+			for _, val := range v3 {
+				data := make(map[string]string)
+				data[k3] = val
+				datas = append(datas, data)
+			}
+			break
+		}
+		for i, data := range datas {
+			for k4, v4 := range realTypeM {
+				if i < len(v4) { //数组数据长度不一致
+					if v4[i] != " " {
+						data[k4] = v4[i]
+					} else {
+						delete(data, k4)
+						continue
+					}
+				} else {
+					fmt.Println("err table")
+					continue
+				}
+			}
+			datas[i] = data
+		}
+		//end
+		for _, fdv := range datas { //清除空数据和只含特殊符号的数据
+			for fmk, fmv := range fdv {
+				if tabletdclear.ReplaceAllString(fmv, "") == "" {
+					delete(fdv, fmk)
+				}
+			}
+		}
+	case "map[string]string": //字符串数据
+		realTypeM := m.(map[string]string)
+		datas = append(datas, realTypeM)
+	default:
+	}
+	return datas
+}
 
-//func hasKey(table *Table, n int) {
-//	//fmt.Println("key匹配到:", n, table.TableResult.HasKey)
-//	if table.TableResult.HasKey == 1 {
-//		return
-//	}
-//	if n >= 1 {
-//		table.TableResult.HasKey = 1
-//	}
-//	//fmt.Println(table.TableResult.HasKey)
-//}
+func convert(key, r string) bool {
+	flag := false
+	//fmt.Println("key1---", key)
+	key = tabletitleclear.ReplaceAllString(key, "")
+	//fmt.Println("key2---", key)
+	reg, err := regexp.Compile(r)
+	if err != nil {
+		fmt.Println("reg err:", err)
+		return flag
+	}
+	flag = reg.MatchString(key)
+	//fmt.Println(key, "	", r, "	", flag)
+	return flag
+}
 
-////是否有商品
-//func hasGoods(table *Table, data interface{}) {
-//	if table.TableResult.HasGoods == 1 {
-//		return
-//	}
-//	sData, ok := data.(string)
-//	proFlag := false
-//	if ok { //string数据检查goods
-//		if sData != "" {
-//			//			if name == "goods" {
-//			//				return GoodsGet.CheckSensitiveWord(src)
-//			//			} else {
-//			//				return BrandGet.CheckSensitiveWord(src)
-//			//			}
+func hasKey(table *Table, n int) {
+	//fmt.Println("key匹配到:", n, table.TableResult.HasKey)
+	if table.TableResult.HasKey == 1 {
+		return
+	}
+	if n >= 1 {
+		table.TableResult.HasKey = 1
+	}
+	//fmt.Println(table.TableResult.HasKey)
+}
 
-//			proFlag = u.CheckSensitiveWord("goods", sData)
-//			if proFlag {
-//				table.TableResult.HasGoods = 1
-//			}
-//		}
-//	} else { //arr数据检查goods
-//		arrData := data.([]string)
-//		if len(arrData) > 0 {
-//			for _, src := range arrData {
-//				if src != "" {
-//					proFlag = u.CheckSensitiveWord("pro", src)
-//					if proFlag {
-//						table.TableResult.HasGoods = 1
-//						break
-//					}
-//				}
-//			}
-//		}
-//	}
-//}
+//是否有商品
+func hasGoods(table *Table, data interface{}) {
+	if table.TableResult.HasGoods == 1 {
+		return
+	}
+	sData, ok := data.(string)
+	proFlag := ""
+	if ok { //string数据检查goods
+		if sData != "" {
+			proFlag = u.GoodsGet.CheckSensitiveWord(sData)
+			if len(proFlag) > 0 {
+				table.TableResult.HasGoods = 1
+			}
+		}
+	} else { //arr数据检查goods
+		arrData := data.([]string)
+		if len(arrData) > 0 {
+			for _, src := range arrData {
+				if src != "" {
+					proFlag = u.GoodsGet.CheckSensitiveWord(src)
+					if len(proFlag) > 0 {
+						table.TableResult.HasGoods = 1
+						break
+					}
+				}
+			}
+		}
+	}
+}
 
-////是否有品牌
-//func hasBrand(table *Table, data interface{}) {
-//	if table.TableResult.HasBrand == 1 {
-//		return
-//	}
-//	sData, ok := data.(string)
-//	brandFlag := false
-//	if ok { //string数据检查goods
-//		if sData != "" {
-//			brandFlag = u.CheckSensitiveWord("brand", sData)
-//			//fmt.Println("--------------", sData, brandFlag)
-//			if brandFlag {
-//				table.TableResult.HasBrand = 1
-//			}
-//		}
-//	} else { //arr数据检查goods
-//		arrData := data.([]string)
-//		if len(arrData) > 0 {
-//			for _, src := range arrData {
-//				if src != "" {
-//					brandFlag = u.CheckSensitiveWord("brand", src)
-//					if brandFlag {
-//						table.TableResult.HasBrand = 1
-//						break
-//					}
-//				}
-//			}
-//		}
-//	}
-//}
+//是否有品牌
+func hasBrand(table *Table, data interface{}) {
+	if table.TableResult.HasBrand == 1 {
+		return
+	}
+	sData, ok := data.(string)
+	brandFlag := ""
+	if ok { //string数据检查brand
+		if sData != "" {
+			brandFlag = u.BrandGet.CheckSensitiveWord(sData)
+			//fmt.Println("--------------", sData, brandFlag)
+			if len(brandFlag) > 0 {
+				table.TableResult.HasBrand = 1
+			}
+		}
+	} else { //arr数据检查brand
+		arrData := data.([]string)
+		if len(arrData) > 0 {
+			for _, src := range arrData {
+				if src != "" {
+					brandFlag = u.BrandGet.CheckSensitiveWord(src)
+					if len(brandFlag) > 0 {
+						table.TableResult.HasBrand = 1
+						break
+					}
+				}
+			}
+		}
+	}
+}

+ 2 - 0
src/jy/util/util.go

@@ -25,6 +25,8 @@ var BrandRules map[string]map[string]string
 var GoodsConfig []string
 var BrandConfig []string
 
+var GoodsGet *DFA //商品
+var BrandGet *DFA //品牌
 func init() {
 	//输出日志配置,多输出源
 	filelog := &lumberjack.Logger{