article.go 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  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. Domain string //网站域名
  14. Href string //原文链接
  15. City string //城市
  16. Province string //省份
  17. Jsondata *map[string]interface{} //
  18. Data *map[string]interface{} //数据库源数据
  19. Block []*Block //分块
  20. Result map[string][]*ExtField //结果
  21. BuyerAddr string //采购单位地址
  22. BlockPackage map[string]*BlockPackage //块中的分包
  23. Winnerorder []map[string]interface{} //中标候选人排序
  24. PackageInfo map[string]map[string]interface{} //分包信息
  25. RuleBlock *RuleBlock //分块规则
  26. BlockClassify *BlockClassify //块分类
  27. BrandData [][]map[string]string //
  28. HasTable int //有table
  29. HasKey int //是否匹配到table中的标题
  30. HasBrand int //有品牌
  31. HasGoods int //有商品
  32. IsFile bool //有附件
  33. AreaScore map[string]int //province得分
  34. CityScore map[string]int //city得分
  35. DistrictScore map[string]int //istrict得分
  36. }
  37. type ExtField struct {
  38. BlockTag map[string]bool //块标签
  39. Field string //属性
  40. Code string //匹配标签(字符串、正则)、正则或lua代码
  41. RuleText string //内容
  42. Type string //kv(细类:colon1,colon2,space,table)、正则(regexp)
  43. MatchType string //匹配类型:1:标签库类型(tag_string,tag_regexp),2:全文正则regcontent
  44. ExtFrom string //抽取来源(title,detail)
  45. Value interface{} //抽取结果
  46. Score float64 //得分
  47. ScoreItem []*ScoreItem //打分项
  48. }
  49. //打分项
  50. type ScoreItem struct {
  51. Des string //分数说明
  52. Code string //匹配标签(字符串、正则)、正则或lua代码
  53. RuleText string //内容
  54. Type string //kv(细类:colon1,colon2,space,table)、正则(regexp)
  55. MatchType string //匹配类型:1:标签库类型(tag_string,tag_regexp),2:全文正则regcontent
  56. ExtFrom string //抽取来源(title,detail)
  57. Value interface{} //抽取结果
  58. Score float64 //得分结果
  59. }
  60. //分块规则
  61. type RuleBlock struct {
  62. BlockRegs []*regexp.Regexp
  63. TitleRegs []*regexp.Regexp
  64. Classify *BlockClassify
  65. }
  66. //块
  67. type Block struct {
  68. Tags []Tags //对块做的标签,可以作为数据抽取的依据
  69. Title string //块标题
  70. Titles []string //拆分以后多个块标题
  71. NotClassifyTitles []string //没有分出类的标题
  72. Index int //块索引
  73. Text string //块内容
  74. Start int //开始索引
  75. End int //结束索引
  76. ColonKV *JobKv //冒号kv (分出的对应的KV值)
  77. TableKV *JobKv //table kv (分出的对应的KV值)
  78. SpaceKV *JobKv //空格 kv (分出的对应的KV值)
  79. BPackage *BlockPackage //分包信息
  80. Tag map[string]bool //块标签
  81. Block []*Block //子块
  82. Classify map[string]bool //块分类
  83. Winnerorder []map[string]interface{} //块中,中标候选人排序
  84. }
  85. //块
  86. type TmpBlock struct {
  87. Tags []Tags //对块做的标签,可以作为数据抽取的依据
  88. Title string //块标题
  89. Titles []string //拆分以后多个块标题
  90. Index int //块索引
  91. Text string //块内容
  92. Start int //开始索引
  93. End int //结束索引
  94. ColonKV string //冒号kv (分出的对应的KV值)
  95. TableKV string //table kv (分出的对应的KV值)
  96. SpaceKV string //空格 kv (分出的对应的KV值)
  97. BPackage string //分包信息
  98. Tag map[string]bool //块标签
  99. Block []*TmpBlock //子块
  100. Category string //块分类
  101. Winnerorder []map[string]interface{} //块中,中标候选人排序
  102. }
  103. //分包和标签
  104. type BlockAndTag struct {
  105. Tag map[string]bool //块标签
  106. Block interface{} //块内容
  107. }
  108. //段落
  109. type Segment struct {
  110. Index int //段落索引
  111. Text string //段落内容
  112. }
  113. //包
  114. type BlockPackage struct {
  115. Index string //序号 (转换后编号,只有数字或字母)
  116. Origin string //包的原始值
  117. Type string //类型 (匹配后面的标段、包之类的词)
  118. Text string //包文 (包对应的正文)
  119. ColonKV *JobKv //冒号kv (分出的对应的KV值)
  120. TableKV *JobKv //table kv (分出的对应的KV值)
  121. SpaceKV *JobKv //空格 kv (分出的对应的KV值)
  122. BidStatus string //成交状态
  123. WinnerOrder []map[string]interface{} //中标人排序
  124. Accuracy bool //包里面抽取字段的准确性,如果能打上块标签的话,就不用中标候选人中的值覆盖包里面的值
  125. }
  126. //联系人
  127. type ContactFormat struct {
  128. Direction int
  129. IndexMap map[int]string
  130. MatchMap map[string]map[string]bool
  131. WeightMap map[string]map[string]interface{}
  132. }
  133. //kv
  134. type Kv struct {
  135. Key string
  136. Value string
  137. Line string
  138. PrevLine string
  139. NextLine string
  140. Title string
  141. }
  142. //最终放到job上的kv
  143. type JobKv struct {
  144. Kvs []*Kv //有序的冒号kv
  145. Kvs_2 []*Kv //有序的冒号kv
  146. Kv map[string]string //table kv (分出的对应的KV值)
  147. KvIndex map[string]int //kv_index(流程)
  148. KvTag map[string]*Tag //带权重的kv
  149. }
  150. func NewJobKv() *JobKv {
  151. return &JobKv{
  152. Kvs: []*Kv{},
  153. Kvs_2: []*Kv{},
  154. Kv: map[string]string{},
  155. KvTag: map[string]*Tag{},
  156. }
  157. }
  158. type NameCode struct {
  159. Name string
  160. Code string
  161. }