12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- 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{
- regexp.MustCompile(`(费率|折扣|中标价)(.{0,10})%(.{0,10})([\d.]+)`),
- regexp.MustCompile(`(费率|折扣|中标价)(.{0,10})[::\s]?(.{0,10})([\d.]+%)`),
- },
- //③上浮下浮率正则模式
- floatingRatePattern: []*regexp.Regexp{
- regexp.MustCompile(`([上下](浮|浮率|浮动)[::\s]?.{0,30}百分之)`),
- regexp.MustCompile(`([上下](浮|浮率|浮动)[::\s]?([\d.]+%))`),
- regexp.MustCompile(`([上下](浮|浮率|浮动)(.{0,3})%(.{0,3})[::\s]?([\d.]+))`),
- },
- //④整标报价正则模式
- lumpSumPattern: []*regexp.Regexp{},
- }
- }
- // QuoteMode 主判断方法,返回报价模式及判断依据 0整标报价模式 1单价模式 2费率模式 3上浮下浮模式
- func (c *QuoteClassifier) QuoteMode(doc BidDocument) (int, map[string]interface{}) {
- result := make(map[string]interface{})
- quoteType := 0 //默认整标报价
- for _, reg := range c.ratePattern {
- if reg.MatchString(doc.Content) {
- quoteType = 2
- }
- }
- for _, reg := range c.floatingRatePattern {
- if reg.MatchString(doc.Content) {
- quoteType = 3
- }
- }
- return quoteType, result
- }
|