article.go 7.7 KB

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