article.go 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  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. }
  56. //打分项
  57. type ScoreItem struct {
  58. Des string //分数说明
  59. Code string //匹配标签(字符串、正则)、正则或lua代码
  60. RuleText string //内容
  61. ScoreFrom string //打分来源
  62. Value interface{} //抽取结果
  63. Score float64 //得分结果
  64. }
  65. //分块规则
  66. type RuleBlock struct {
  67. BlockRegs []*regexp.Regexp
  68. TitleRegs []*regexp.Regexp
  69. Classify *BlockClassify
  70. }
  71. //块
  72. type Block struct {
  73. Tags []Tags //对块做的标签,可以作为数据抽取的依据
  74. Title string //块标题
  75. Titles []string //拆分以后多个块标题
  76. NotClassifyTitles []string //没有分出类的标题
  77. Index int //块索引
  78. Text string //块内容
  79. Start int //开始索引
  80. End int //结束索引
  81. ColonKV *JobKv //冒号kv (分出的对应的KV值)
  82. TableKV *JobKv //table kv (分出的对应的KV值)
  83. SpaceKV *JobKv //空格 kv (分出的对应的KV值)
  84. BPackage *BlockPackage //分包信息
  85. Tag map[string]bool //块标签
  86. Block []*Block //子块
  87. Classify map[string]bool //块分类
  88. Winnerorder []map[string]interface{} //块中,中标候选人排序
  89. }
  90. //块
  91. type TmpBlock struct {
  92. Tags []Tags //对块做的标签,可以作为数据抽取的依据
  93. Title string //块标题
  94. Titles []string //拆分以后多个块标题
  95. Index int //块索引
  96. Text string //块内容
  97. Start int //开始索引
  98. End int //结束索引
  99. ColonKV string //冒号kv (分出的对应的KV值)
  100. TableKV string //table kv (分出的对应的KV值)
  101. SpaceKV string //空格 kv (分出的对应的KV值)
  102. BPackage string //分包信息
  103. Tag map[string]bool //块标签
  104. Block []*TmpBlock //子块
  105. Category string //块分类
  106. Winnerorder []map[string]interface{} //块中,中标候选人排序
  107. }
  108. //分包和标签
  109. type BlockAndTag struct {
  110. Tag map[string]bool //块标签
  111. Block interface{} //块内容
  112. }
  113. //段落
  114. type Segment struct {
  115. Index int //段落索引
  116. Text string //段落内容
  117. }
  118. //包
  119. type BlockPackage struct {
  120. Origin string //包的原始值
  121. Name string //标段(包)名称
  122. Text string //包文 (包对应的正文)
  123. Budget float64 //标段(包)预算
  124. Winner string //标段(包)中标单位
  125. Bidamount float64 //标段(包)中标价
  126. Index string //序号 (转换后编号,只有数字或字母)
  127. Type string //类型 (匹配后面的标段、包之类的词)
  128. ColonKV *JobKv //冒号kv (分出的对应的KV值)
  129. TableKV *JobKv //table kv (分出的对应的KV值)
  130. SpaceKV *JobKv //空格 kv (分出的对应的KV值)
  131. BidStatus string //成交状态
  132. WinnerOrder []map[string]interface{} //中标人排序
  133. Accuracy bool //包里面抽取字段的准确性,如果能打上块标签的话,就不用中标候选人中的值覆盖包里面的值
  134. }
  135. //联系人
  136. type ContactFormat struct {
  137. Direction int
  138. IndexMap map[int]string
  139. MatchMap map[string]map[string]bool
  140. WeightMap map[string]map[string]interface{}
  141. }
  142. //kv
  143. type Kv struct {
  144. Key string
  145. Value string
  146. Line string
  147. PrevLine string
  148. NextLine string
  149. Title string
  150. }
  151. //最终放到job上的kv
  152. type JobKv struct {
  153. Kvs []*Kv //有序的冒号kv
  154. Kvs_2 []*Kv //有序的冒号kv
  155. KvTags map[string][]*Tag //带权重的kv
  156. }
  157. func NewJobKv() *JobKv {
  158. return &JobKv{
  159. Kvs: []*Kv{},
  160. Kvs_2: []*Kv{},
  161. KvTags: map[string][]*Tag{},
  162. }
  163. }
  164. type NameCode struct {
  165. Name string
  166. Code string
  167. }