123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- package prompt
- import (
- "data_ai/ai"
- "data_ai/clean"
- "data_ai/ul"
- qu "jygit.jydev.jianyu360.cn/data_processing/common_utils"
- "strings"
- )
- // 获取分类信息...
- func AcquireClassInfo(detail string, title string) (string, string) {
- top_content := PromptToptypeFieldText(detail, title)
- top_zp, ok := PostZhiPuClassInfo(top_content)
- if !ok {
- return "", ""
- }
- //根据一级分类识别,获取toptype和subtype
- var toptype, subtype string //标准化的一级、二级分类
- toptype_ai, _ := top_zp["信息分类"].(string)
- tpInfo := ul.ToptypeDict[toptype_ai]
- if tpInfo != nil {
- toptype = tpInfo.Topetype
- subtype = tpInfo.Subtype
- } else { //匹配结果为非正规toptype,如:询价公告(66993a9d66cf0db42a5597af)
- for top, reg := range ul.ToptypeRegs {
- if reg.MatchString(toptype_ai) {
- if tpInfo = ul.ToptypeDict[top]; tpInfo != nil { //ToptypeRegs中预告公告、验收公告、合同公告直接获取subtype
- toptype = tpInfo.Topetype
- subtype = tpInfo.Subtype
- break
- }
- }
- }
- }
- if toptype == "" || tpInfo == nil {
- return "", ""
- }
- //获取二级分类
- sub_zp := map[string]interface{}{}
- if subtype == "" {
- sub_content := PromptSubtypeFieldText(detail, title, toptype, tpInfo)
- sub_zp, ok = PostZhiPuClassInfo(sub_content)
- if !ok {
- return "", ""
- }
- subtype_ai, _ := sub_zp["信息分类"].(string)
- subtype = tpInfo.SubtypeDict[subtype_ai]
- if subtype == "" && tpInfo.SubtypeRegs != nil { //二级分类校正
- for sub, reg := range tpInfo.SubtypeRegs {
- if reg.MatchString(subtype_ai) {
- subtype = sub
- break
- }
- }
- }
- }
- //subtype到此还可能为空,给默认值
- if subtype == "" {
- subtype = "其它"
- }
- return toptype, subtype
- }
- // 获取外围抽取字段
- func AcquireExtractFieldInfo(detail string) map[string]interface{} {
- content := PromptFieldText(detail)
- zp := PostZhiPuInfo(content)
- return zp
- }
- // 获取是否为分包信息
- func AcquireIsPackageInfo(detail string) bool {
- content := PromptIsPackageText(detail)
- zp := PostZhiPuInfo(content)
- if qu.ObjToString(zp["分包"]) == "是" {
- return true
- }
- return false
- }
- // 获取标讯多包信息
- func AcquireMultiplePackageInfo(detail string) map[string]interface{} {
- content := PromptMultiplePackageText(detail)
- zp := PostZhiPuInfo(content)
- return zp
- //后续在转格式...暂时先输出两个值
- pkg := map[string]interface{}{}
- s_winner, s_bidamount := "", 0.0
- win_arr, win_temp := []string{}, map[string]string{}
- if score := qu.Float64All(zp["分包信息score"]); score >= 90.0 {
- pkginfo := ul.IsMarkInterfaceMap(zp["分包信息"])
- for _, v := range pkginfo {
- winner := clean.CleanWinner(qu.ObjToString(v["中标单位"]))
- bidamount := clean.CleanMoney((v["中标金额"]))
- s_bidamount += bidamount
- if win_temp[winner] == "" && winner != "" {
- win_arr = append(win_arr, winner)
- win_temp[winner] = winner
- }
- }
- s_winner = strings.Join(win_arr, ",")
- pkg["s_winner"] = s_winner
- pkg["s_bidamount"] = s_bidamount
- }
- return pkg
- }
- // 请求质谱数据外围字段...
- func PostZhiPuInfo(content string) map[string]interface{} {
- zp, ok := map[string]interface{}{}, 0
- for {
- ok++
- if zp = ai.PostZhiPuAI(content); len(zp) > 0 {
- break
- }
- if ok >= 5 {
- break
- }
- }
- return zp
- }
- // 请求质谱数据-分类字段
- func PostZhiPuClassInfo(content string) (map[string]interface{}, bool) {
- zp := map[string]interface{}{}
- times := 0
- ok := false
- for {
- times++
- zp = ai.PostClassZhiPuAI(content)
- if len(zp) > 0 {
- ok = true
- break
- }
- if times >= 5 {
- break
- }
- }
- return zp, ok
- }
|