1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package main
- import (
- "log"
- "regexp"
- )
- // quoteClassifier 报价模式分类器
- type QuoteClassifier struct {
- unitPriceWords []string //单价/日历天报价模式
- rateWords []string // 费率报价模式
- floatingRateWords []string // 上浮下浮率报价模式
- lumpSumWords []string // 整标报价模式
- unitPricePattern []*regexp.Regexp // 单价正则模式
- ratePattern []*regexp.Regexp // 费率正则模式
- floatingRatePattern []*regexp.Regexp // 上浮下浮率正则模式
- lumpSumPattern []*regexp.Regexp // 整标报价正则模式
- }
- // NewQuoteClassifier 初始化分类器(工厂方法)
- func NewQuoteClassifier() *QuoteClassifier {
- log.Println("QuoteClassifier")
- return &QuoteClassifier{
- //1、 核心关键词列表(可根据需要扩展)
- //2、 预编译正则表达式(匹配各种报价形式)
- //①单价正则模式
- unitPricePattern: []*regexp.Regexp{},
- //②费率正则模式
- ratePattern: []*regexp.Regexp{},
- //③上浮下浮率正则模式
- floatingRatePattern: []*regexp.Regexp{
- regexp.MustCompile(`([上下](浮|浮率|浮动)[::\s]?.{0,30}百分之)`),
- regexp.MustCompile(`([上下](浮|浮率|浮动)[::\s]?([\d.]+%))`),
- },
- //④整标报价正则模式
- lumpSumPattern: []*regexp.Regexp{},
- }
- }
- // QuoteMode 主判断方法,返回报价模式及判断依据
- func (c *QuoteClassifier) QuoteMode(doc BidDocument) (int, map[string]interface{}) {
- result := make(map[string]interface{})
- quoteType := 0
- for _, reg := range c.floatingRatePattern {
- if reg.MatchString(doc.Content) {
- quoteType = 2
- }
- }
- return quoteType, result
- }
|