quotemode.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package main
  2. import (
  3. "log"
  4. "regexp"
  5. )
  6. // quoteClassifier 报价模式分类器
  7. type QuoteClassifier struct {
  8. unitPriceWords []string //单价/日历天报价模式
  9. rateWords []string // 费率报价模式
  10. floatingRateWords []string // 上浮下浮率报价模式
  11. lumpSumWords []string // 整标报价模式
  12. unitPricePattern []*regexp.Regexp // 单价正则模式
  13. ratePattern []*regexp.Regexp // 费率正则模式
  14. floatingRatePattern []*regexp.Regexp // 上浮下浮率正则模式
  15. lumpSumPattern []*regexp.Regexp // 整标报价正则模式
  16. }
  17. // NewQuoteClassifier 初始化分类器(工厂方法)
  18. func NewQuoteClassifier() *QuoteClassifier {
  19. log.Println("QuoteClassifier")
  20. return &QuoteClassifier{
  21. //1、 核心关键词列表(可根据需要扩展)
  22. //2、 预编译正则表达式(匹配各种报价形式)
  23. //①单价正则模式
  24. unitPricePattern: []*regexp.Regexp{},
  25. //②费率正则模式
  26. ratePattern: []*regexp.Regexp{
  27. regexp.MustCompile(`(费率|折扣|中标价)(.{0,10})%(.{0,10})([\d.]+)`),
  28. regexp.MustCompile(`(费率|折扣|中标价)(.{0,10})[::\s]?(.{0,10})([\d.]+%)`),
  29. },
  30. //③上浮下浮率正则模式
  31. floatingRatePattern: []*regexp.Regexp{
  32. regexp.MustCompile(`([上下](浮|浮率|浮动)[::\s]?.{0,30}百分之)`),
  33. regexp.MustCompile(`([上下](浮|浮率|浮动)[::\s]?([\d.]+%))`),
  34. regexp.MustCompile(`([上下](浮|浮率|浮动)(.{0,3})%(.{0,3})[::\s]?([\d.]+))`),
  35. },
  36. //④整标报价正则模式
  37. lumpSumPattern: []*regexp.Regexp{},
  38. }
  39. }
  40. // QuoteMode 主判断方法,返回报价模式及判断依据 0整标报价模式 1单价模式 2费率模式 3上浮下浮模式
  41. func (c *QuoteClassifier) QuoteMode(doc BidDocument) (int, map[string]interface{}) {
  42. result := make(map[string]interface{})
  43. quoteType := 0 //默认整标报价
  44. for _, reg := range c.ratePattern {
  45. if reg.MatchString(doc.Content) {
  46. quoteType = 2
  47. }
  48. }
  49. for _, reg := range c.floatingRatePattern {
  50. if reg.MatchString(doc.Content) {
  51. quoteType = 3
  52. }
  53. }
  54. return quoteType, result
  55. }