article.go 6.7 KB

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