main_blocktest.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. package main
  2. import (
  3. "fmt"
  4. "jy/extract"
  5. "jy/mongodbutil"
  6. "jy/pretreated"
  7. ju "jy/util"
  8. "log"
  9. "os"
  10. qu "qfw/util"
  11. "regexp"
  12. "time"
  13. )
  14. var f *os.File
  15. var m = map[string]bool{}
  16. func main12() {
  17. //winnerorder()
  18. //return
  19. //log.Println(pretreated.ProcTitle("以上公告内容如有变动将在相关网络媒体上另行通知凡购买本招标文件的单位必须就此采购项目的相关事宜详细咨询否则参与投标即被视为已经充分了解了招标方的需求中标后承担该文件范围内的所有要求投标前如对招标文件存有疑问请在投标截止日期前三个工作日以实名制书面文件向我公司询问否则视为接受已报名购买招标文件的投标商未递交投标文件或虽递交投标文件但未参加开标大会的投标商不得再参加该项目的采购活动"))
  20. //return
  21. //f, _ = os.OpenFile("./title.txt", os.O_RDWR|os.O_CREATE, 777)
  22. //all()
  23. one()
  24. }
  25. func all() {
  26. m := mongodbutil.MgoFactory(3, 3, 120, "192.168.3.207:27082", "extract_kf")
  27. sess := m.Get()
  28. defer m.Close(sess)
  29. it := sess.DB("extract_kf").C("bidding201901").Find(nil).Iter()
  30. pool := make(chan bool, 5)
  31. count := 0
  32. for temp := make(map[string]interface{}); it.Next(&temp); {
  33. pool <- true
  34. count++
  35. go func(d map[string]interface{}) {
  36. defer func() {
  37. <-pool
  38. }()
  39. com(d)
  40. }(temp)
  41. temp = make(map[string]interface{})
  42. if count%200 == 0 {
  43. log.Println(count)
  44. }
  45. }
  46. log.Println("over...")
  47. time.Sleep(time.Hour)
  48. }
  49. func one() {
  50. m := mongodbutil.MgoFactory(3, 3, 120, "192.168.3.207:27081", "qfw")
  51. d, _ := m.FindById("bidding", "5d424df7a5cb26b9b7b61fde", extract.Fields)
  52. com(*d)
  53. }
  54. func com(doc map[string]interface{}) {
  55. detail := GetDetail(doc)
  56. doc["detail"] = detail
  57. toptype := qu.ObjToString(doc["toptype"])
  58. subtype := qu.ObjToString(doc["subtype"])
  59. if qu.ObjToString(doc["type"]) == "bid" {
  60. toptype = "结果"
  61. }
  62. if toptype == "" {
  63. toptype = "*"
  64. }
  65. e := &extract.ExtractTask{
  66. TaskInfo: &extract.TaskInfo{
  67. Version: "V3.1.2",
  68. VersionId: "5cdd1c70e138234848c1d703",
  69. ProcessPool: make(chan bool, 1),
  70. },
  71. }
  72. e.Id = qu.ObjToString(ju.Config["udptaskid"])
  73. e.InitTaskInfo()
  74. //d.TaskInfo.FDB = db.MgoFactory(3, 5, 600, ext.TaskInfo.FromDbAddr, ext.TaskInfo.FromDB)
  75. //d.TaskInfo.TDB = db.MgoFactory(3, 5, 600, ext.TaskInfo.ToDbAddr, ext.TaskInfo.ToDB)
  76. e.InitSite()
  77. e.InitRulePres()
  78. e.InitRuleBacks(false)
  79. e.InitRuleBacks(true)
  80. e.InitRuleCore(false)
  81. e.InitRuleCore(true)
  82. e.InitBlockRule()
  83. e.InitPkgCore()
  84. e.InitTag(false)
  85. e.InitTag(true)
  86. e.InitClearFn(false)
  87. e.InitClearFn(true)
  88. if e.IsExtractCity { //版本上控制是否开始城市抽取
  89. //初始化城市DFA信息
  90. e.InitCityDFA()
  91. e.InitAreaCode()
  92. e.InitPostCode()
  93. }
  94. //质量审核
  95. e.InitAuditFields()
  96. e.InitAuditRule()
  97. e.InitAuditClass()
  98. e.InitAuditRecogField()
  99. //品牌抽取是否开启
  100. ju.IsBrandGoods, _ = ju.Config["brandgoods"].(bool)
  101. j := &ju.Job{
  102. SourceMid: qu.BsonIdToSId(doc["_id"]),
  103. Category: toptype,
  104. CategorySecond: subtype,
  105. Content: qu.ObjToString(doc["detail"]),
  106. SpiderCode: qu.ObjToString(doc["spidercode"]),
  107. //Domain: qu.ObjToString(doc["domain"]),
  108. //Href: qu.ObjToString(doc["href"]),
  109. Title: qu.ObjToString(doc["title"]),
  110. Data: &doc,
  111. City: qu.ObjToString(doc["city"]),
  112. Province: qu.ObjToString(doc["area"]),
  113. Result: map[string][]*ju.ExtField{},
  114. BuyerAddr: qu.ObjToString(doc["buyeraddr"]),
  115. RuleBlock: e.RuleBlock,
  116. }
  117. e.TaskInfo.ProcessPool <- true
  118. pretreated.AnalyStart(j,false,"")
  119. e.ExtractProcess(j, nil,false)
  120. log.Println("=============块信息================")
  121. for _, v := range j.Block {
  122. log.Println("----", v.Title, v.Titles, "----")
  123. if v.ColonKV != nil {
  124. for kk, vv := range v.ColonKV.KvTags {
  125. for _, vvv := range vv {
  126. log.Println("ColonKV", kk, "---", vvv.Key, "---", vvv.Value, "---", vvv.Weight)
  127. }
  128. }
  129. }
  130. if v.SpaceKV != nil {
  131. for kk, vv := range v.SpaceKV.KvTags {
  132. for _, vvv := range vv {
  133. log.Println("SpaceKV", kk, "---", vvv.Key, "---", vvv.Value, "---", vvv.Weight)
  134. }
  135. }
  136. }
  137. if v.TableKV != nil {
  138. for kk, vv := range v.TableKV.KvTags {
  139. for _, vvv := range vv {
  140. log.Println("TableKV", kk, "---", vvv.Key, "---", vvv.Value, "---", vvv.Weight)
  141. }
  142. }
  143. }
  144. //log.Println("Classify", v.Classify)
  145. //log.Println("Tag", v.Tag)
  146. }
  147. log.Println("=============抽取结果================")
  148. set := (e.ResultArr[0][1]["$set"]).(map[string]interface{})
  149. for k, v := range set {
  150. if k == "budget" || k == "bidamount" || k == "winner" || k == "amount" || k == "projectname" || k == "projectcode" || k == "buyer" || k == "buyerperson" || k == "buyertel" || k == "agency" {
  151. log.Println(k, "---", v)
  152. }
  153. }
  154. log.Println("=============抽取结果 result================")
  155. for k, v := range set["result"].(map[string][]*ju.ExtField) {
  156. if k != "winner" {
  157. continue
  158. }
  159. for _, vv := range v {
  160. log.Println(k, fmt.Sprintf("%+v", vv))
  161. for kkk, vvv := range vv.ScoreItem {
  162. log.Println("--", kkk, k, fmt.Sprintf("%+v", vvv))
  163. }
  164. log.Println("\n")
  165. }
  166. }
  167. log.Println("=============中标候选人================")
  168. for _, v := range j.Winnerorder {
  169. log.Println(v)
  170. }
  171. log.Println("=============分包================")
  172. for k, v := range j.BlockPackage {
  173. log.Println(k, v)
  174. }
  175. log.Println("=============正文================")
  176. //log.Println(j.Content)
  177. return
  178. for _, v := range j.Block {
  179. if v.ColonKV != nil && v.ColonKV.KvTags != nil {
  180. for kk, vv := range v.ColonKV.KvTags {
  181. for _, vvv := range vv {
  182. log.Println(kk, vvv.Weight, vvv.Value)
  183. }
  184. }
  185. }
  186. if v.TableKV != nil && v.TableKV.KvTags != nil {
  187. for kk, vv := range v.TableKV.KvTags {
  188. for _, vvv := range vv {
  189. log.Println(kk, vvv.Weight, vvv.Value)
  190. }
  191. }
  192. }
  193. if v.SpaceKV != nil && v.SpaceKV.KvTags != nil {
  194. for kk, vv := range v.SpaceKV.KvTags {
  195. for _, vvv := range vv {
  196. log.Println(kk, vvv.Weight, vvv.Value)
  197. }
  198. }
  199. }
  200. }
  201. log.Println(len(j.Block))
  202. return
  203. for _, v := range j.Block {
  204. if m[v.Title] || v.Title == "" {
  205. continue
  206. }
  207. if !regexp.MustCompile("或|和|以?及|与|、|或").MatchString(v.Title) {
  208. //continue
  209. }
  210. m[v.Title] = true
  211. f.WriteString(j.SourceMid + "-----" + v.Title + "---" + fmt.Sprint(v.Titles) + "\n")
  212. continue
  213. for _, kv := range v.ColonKV.Kvs {
  214. log.Println("\n")
  215. log.Println(kv.Key, "---", kv.Value)
  216. log.Println(kv.Line)
  217. log.Println("=======================")
  218. }
  219. }
  220. }
  221. func GetDetail(doc map[string]interface{}) (detail string) {
  222. detail = ""
  223. d1, _ := doc["detail"].(string)
  224. d2, _ := doc["contenthtml"].(string)
  225. if len(d1) >= len(d2) || d2 == "" {
  226. detail = d1
  227. } else {
  228. detail = d2
  229. }
  230. detail = ju.CutLableStr(detail)
  231. detail = ju.NewCut().ClearHtml(detail)
  232. tabs, ration := pretreated.ComputeConRatio(detail, 1)
  233. if len(tabs) > 0 {
  234. newcon, newtabs, newration := pretreated.FindBigText(detail, ration, tabs)
  235. //log.Println(newcon, newtabs, newration)
  236. if newcon != "" && newration == 0 {
  237. detail = newcon
  238. tabs = newtabs
  239. ration = newration
  240. }
  241. }
  242. return detail
  243. }
  244. func winnerorder() {
  245. text := `评审专家名单:
  246. 吴殿波、韩屹、孙胜进、郑丹、李海波
  247. 中标标的名称、规格型号、数量、单价、服务要求:
  248. 2019年沈阳惠涌供热有限责任公司、沈阳圣达热力供暖有限责任公司、沈阳惠盛供热有限责任公司PE管保温
  249. 第一入围供货商:沈阳曲暖鼎盛保温安装有限公司 、总单价:11.833300
  250. 第二入围供货商:沈阳国盛防腐保温有限公司、总单价:11.102100
  251. 第三入围供货商:沈阳泰豪管材有限公司、总单价:13.258100`
  252. log.Println((&pretreated.WinnerOrderEntity{}).Find(text, true, 1,false,""))
  253. }