article.go 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. package util
  2. import (
  3. "regexp"
  4. )
  5. //
  6. type Job struct {
  7. SourceMid string //数据源的MongoId
  8. Category string //类别
  9. CategorySecond string //二级分类
  10. Content string //正文
  11. Title string //标题
  12. SpiderCode string //爬虫代码
  13. Site string //站点
  14. Domain string //网站域名
  15. Href string //原文链接
  16. City string //城市
  17. Province string //省份
  18. Jsondata *map[string]interface{} //
  19. Data *map[string]interface{} //数据库源数据
  20. Block []*Block //分块
  21. Result map[string][]*ExtField //结果
  22. BuyerAddr string //采购单位地址
  23. BlockPackage map[string]*BlockPackage //块中的分包
  24. Winnerorder []map[string]interface{} //中标候选人排序
  25. PackageInfo map[string]map[string]interface{} //分包信息
  26. RuleBlock *RuleBlock //分块规则
  27. BlockClassify *BlockClassify //块分类
  28. BrandData [][]map[string]string //品牌抽取
  29. PriceNumberData [][]map[string]interface{} //单价和个数抽取
  30. HasTable int //有table
  31. HasKey int //是否匹配到table中的标题
  32. HasBrand int //有品牌
  33. HasGoods int //有商品
  34. IsFile bool //有附件
  35. FullAreaScore map[string]float64 //全称province得分
  36. FullCityScore map[string]float64 //全称city得分
  37. FullDistrictScore map[string]float64 //全称district得分
  38. SimAreaScore map[string]float64 //简称province得分
  39. SimCityScore map[string]float64 //简称city得分
  40. SimDistrictScore map[string]float64 //简称district得分
  41. Dataging int
  42. IsClearnMoney string //站点清理金额
  43. }
  44. type ExtField struct {
  45. BlockTag map[string]string //块标签
  46. Field string //属性
  47. Code string //匹配标签(字符串、正则)、正则或lua代码
  48. RuleText string //内容
  49. Type string //kv(细类:colon1,colon2,space,table)、正则(regexp)
  50. MatchType string //匹配类型:1:标签库类型(tag_string,tag_regexp),2:全文正则regcontent
  51. ExtFrom string //抽取来源(title,detail)
  52. SourceValue interface{} //抽取结果--未清理
  53. Value interface{} //抽取结果
  54. Score float64 //得分
  55. ScoreItem []*ScoreItem //打分项
  56. Weight int //权重值
  57. ValRepeat int //结果值重复次数,打分参考
  58. IsTrue bool //针对金额0是否有效的值,其他字段不参考
  59. }
  60. //打分项
  61. type ScoreItem struct {
  62. Des string //分数说明
  63. Code string //匹配标签(字符串、正则)、正则或lua代码
  64. RuleText string //内容
  65. ScoreFrom string //打分来源
  66. Value interface{} //抽取结果
  67. Score float64 //得分结果
  68. }
  69. //分块规则
  70. type RuleBlock struct {
  71. BlockRegs []*regexp.Regexp
  72. TitleRegs []*regexp.Regexp
  73. Classify *BlockClassify
  74. }
  75. //块
  76. type Block struct {
  77. Tags []Tags //对块做的标签,可以作为数据抽取的依据
  78. Title string //块标题
  79. Titles []string //拆分以后多个块标题
  80. NotClassifyTitles []string //没有分出类的标题
  81. Index int //块索引
  82. Text string //块内容
  83. Start int //开始索引
  84. End int //结束索引
  85. ColonKV *JobKv //冒号kv (分出的对应的KV值)
  86. TableKV *JobKv //table kv (分出的对应的KV值)
  87. SpaceKV *JobKv //空格 kv (分出的对应的KV值)
  88. BPackage *BlockPackage //分包信息
  89. Tag map[string]bool //块标签
  90. Block []*Block //子块
  91. Classify map[string]bool //块分类
  92. Winnerorder []map[string]interface{} //块中,中标候选人排序
  93. }
  94. //块
  95. type TmpBlock struct {
  96. Tags []Tags //对块做的标签,可以作为数据抽取的依据
  97. Title string //块标题
  98. Titles []string //拆分以后多个块标题
  99. Index int //块索引
  100. Text string //块内容
  101. Start int //开始索引
  102. End int //结束索引
  103. ColonKV string //冒号kv (分出的对应的KV值)
  104. TableKV string //table kv (分出的对应的KV值)
  105. SpaceKV string //空格 kv (分出的对应的KV值)
  106. BPackage string //分包信息
  107. Tag map[string]bool //块标签
  108. Block []*TmpBlock //子块
  109. Category string //块分类
  110. Winnerorder []map[string]interface{} //块中,中标候选人排序
  111. }
  112. //分包和标签
  113. type BlockAndTag struct {
  114. Tag map[string]bool //块标签
  115. Block interface{} //块内容
  116. }
  117. //段落
  118. type Segment struct {
  119. Index int //段落索引
  120. Text string //段落内容
  121. }
  122. //包
  123. type BlockPackage struct {
  124. Origin string //包的原始值
  125. Name string //标段(包)名称
  126. Text string //包文 (包对应的正文)
  127. Budget float64 //标段(包)预算
  128. IsTrueBudget bool //标段(包)预算0是否有效
  129. Winner string //标段(包)中标单位
  130. WinnerTel string //中标单位联系电话
  131. WinnerPerson string //中标联系人
  132. Bidamount float64 //标段(包)中标价
  133. Agencyfee float64 //包服务费
  134. IsTrueAgencyfee bool //
  135. IsTrueBidamount bool //标段(包)中标价 0是否有效
  136. Index string //序号 (转换后编号,只有数字或字母)
  137. Type string //类型 (匹配后面的标段、包之类的词)
  138. ColonKV *JobKv //冒号kv (分出的对应的KV值)
  139. TableKV *JobKv //table kv (分出的对应的KV值)
  140. SpaceKV *JobKv //空格 kv (分出的对应的KV值)
  141. BidStatus string //成交状态
  142. WinnerOrder []map[string]interface{} //中标人排序
  143. Accuracy bool //包里面抽取字段的准确性,如果能打上块标签的话,就不用中标候选人中的值覆盖包里面的值
  144. }
  145. //联系人
  146. type ContactFormat struct {
  147. Direction int
  148. IndexMap map[int]string
  149. MatchMap map[string]map[string]bool
  150. WeightMap map[string]map[string]interface{}
  151. }
  152. //kv
  153. type Kv struct {
  154. Key string
  155. Value string
  156. Line string
  157. PrevLine string
  158. NextLine string
  159. Title string
  160. }
  161. //最终放到job上的kv
  162. type JobKv struct {
  163. Kvs []*Kv //有序的冒号kv
  164. Kvs_2 []*Kv //有序的冒号kv
  165. KvTags map[string][]*Tag //带权重的kv
  166. }
  167. func NewJobKv() *JobKv {
  168. return &JobKv{
  169. Kvs: []*Kv{},
  170. Kvs_2: []*Kv{},
  171. KvTags: map[string][]*Tag{},
  172. }
  173. }
  174. type NameCode struct {
  175. Name string
  176. Code string
  177. }