quotemode.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. //③上浮下浮率正则模式
  28. floatingRatePattern: []*regexp.Regexp{
  29. regexp.MustCompile(`([上下](浮|浮率|浮动)[::\s]?.{0,30}百分之)`),
  30. regexp.MustCompile(`([上下](浮|浮率|浮动)[::\s]?([\d.]+%))`),
  31. },
  32. //④整标报价正则模式
  33. lumpSumPattern: []*regexp.Regexp{},
  34. }
  35. }
  36. // QuoteMode 主判断方法,返回报价模式及判断依据
  37. func (c *QuoteClassifier) QuoteMode(doc BidDocument) (int, map[string]interface{}) {
  38. result := make(map[string]interface{})
  39. quoteType := 0
  40. for _, reg := range c.floatingRatePattern {
  41. if reg.MatchString(doc.Content) {
  42. quoteType = 2
  43. }
  44. }
  45. return quoteType, result
  46. }