article.go 7.1 KB

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