article.go 8.4 KB

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