Skip to content

Commit

Permalink
disable debug by default
Browse files Browse the repository at this point in the history
  • Loading branch information
pablodz committed May 15, 2024
1 parent f6978b7 commit e0b34f0
Show file tree
Hide file tree
Showing 4 changed files with 63 additions and 48 deletions.
3 changes: 3 additions & 0 deletions examples/alpha/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ import (
)

func main() {

itn.SetDebug(true)

processor := itn.NewLanguageES()
new_string := processor.Alpha2Digit(
"uno dos quince",
Expand Down
15 changes: 7 additions & 8 deletions itn/base.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package itn

import (
"fmt"
"log"
"regexp"
"strings"
)
Expand Down Expand Up @@ -249,39 +248,39 @@ func (lg Language) Alpha2Digit(text string, relaxed bool, signed bool, ordinalTh
outSegments := []string{}
for _, sp := range segmentAndPuncts {
tokens := strings.Split(sp.segment, " ")
log.Printf("tokens %v", tokens)
logPrintf("tokens %v", tokens)

numBuilder := NewWordToDigitParser(lg, relaxed, signed, ordinalThreshold, "")
lastWord := ""
inNumber := false
outTokens := []string{}
for _, couple := range lookAhead(tokens) {

log.Printf("✅ [word] %s [ahead] %s", couple.Word, couple.Ahead)
logPrintf("✅ [word] %s [ahead] %s", couple.Word, couple.Ahead)

pushed := numBuilder.push(strings.ToLower(couple.Word), strings.ToLower(couple.Ahead))
if pushed {
log.Printf("> condition 1: word %s ahead %s", couple.Word, couple.Ahead)
logPrintf("> condition 1: word %s ahead %s", couple.Word, couple.Ahead)
inNumber = true
} else if inNumber {
log.Printf("> condition 2: word %s ahead %s", couple.Word, couple.Ahead)
logPrintf("> condition 2: word %s ahead %s", couple.Word, couple.Ahead)
outTokens = append(outTokens, numBuilder.GetValue())
numBuilder = NewWordToDigitParser(lg, relaxed, signed, ordinalThreshold, lastWord)
inNumber = numBuilder.push(strings.ToLower(couple.Word), strings.ToLower(couple.Ahead))
}

if !inNumber {
log.Printf("> condition 3: word %s ahead %s", couple.Word, couple.Ahead)
logPrintf("> condition 3: word %s ahead %s", couple.Word, couple.Ahead)
outTokens = append(outTokens, couple.Word)
}

lastWord = strings.ToLower(couple.Word)

log.Printf("... lastWord %s, inNumber %t, outTokens %v", lastWord, inNumber, outTokens)
logPrintf("... lastWord %s, inNumber %t, outTokens %v", lastWord, inNumber, outTokens)

}

log.Printf("---")
logPrintf("---")
numBuilder.close()
if numBuilder.GetValue() != "" {
outTokens = append(outTokens, numBuilder.GetValue())
Expand Down
79 changes: 39 additions & 40 deletions itn/parsers.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package itn

import (
"fmt"
"log"
"strings"
)

Expand All @@ -23,40 +22,40 @@ func NewWordStreamValueParser(lang Language, relaxed bool) *WordStreamValueParse
}

func (w *WordStreamValueParser) GetValue() int {
log.Printf("+ WordStreamValueParser.GetValue")
logPrintf("+ WordStreamValueParser.GetValue")
return w.n000Val + w.grpVal
}

func (w *WordStreamValueParser) groupExpects(word string, update bool) bool {
log.Printf("+ WordStreamValueParser.groupExpects.word %s [lastWord] %s [update] %t", word, w.lastWord, update)
logPrintf("+ WordStreamValueParser.groupExpects.word %s [lastWord] %s [update] %t", word, w.lastWord, update)
expected := false
if w.lastWord == "" {
log.Printf(">> WordStreamValueParser.groupExpects.condition 0: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
logPrintf(">> WordStreamValueParser.groupExpects.condition 0: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
expected = true
} else if containsKey(w.lang.Units, w.lastWord) && w.grpVal < 10 || containsKey(w.lang.STens, w.lastWord) && w.grpVal < 20 {
log.Printf(">> WordStreamValueParser.groupExpects.condition 1: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
logPrintf(">> WordStreamValueParser.groupExpects.condition 1: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
expected = containsKey(w.lang.Hundred, word)
} else if containsKey(w.lang.MHundreds, w.lastWord) {
log.Printf(">> WordStreamValueParser.groupExpects.condition 2: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
logPrintf(">> WordStreamValueParser.groupExpects.condition 2: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
expected = true
} else if containsKey(w.lang.MTens, w.lastWord) {
log.Printf(">> WordStreamValueParser.groupExpects.condition 3: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
logPrintf(">> WordStreamValueParser.groupExpects.condition 3: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
expected = containsKey(w.lang.Units, word) || containsKey(w.lang.STens, word) && contains(w.lang.MTensWSTens, w.lastWord)
} else if containsKey(w.lang.Hundred, w.lastWord) {
log.Printf(">> WordStreamValueParser.groupExpects.condition 4: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
logPrintf(">> WordStreamValueParser.groupExpects.condition 4: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
expected = !containsKey(w.lang.Hundred, word)
}

if update {
log.Printf(">> WordStreamValueParser.groupExpects.condition 5: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
logPrintf(">> WordStreamValueParser.groupExpects.condition 5: [word]%s [lastWord] %s [update] %t", word, w.lastWord, update)
w.lastWord = word
}

return expected
}

func (w *WordStreamValueParser) isCoefAppliable(coef int) bool {
log.Printf("+ WordStreamValueParser.isCoefAppliable.coef %d", coef)
logPrintf("+ WordStreamValueParser.isCoefAppliable.coef %d", coef)
if w.lang.Simplify_check_coef_appliable {
return coef != w.GetValue()
}
Expand All @@ -73,31 +72,31 @@ func (w *WordStreamValueParser) isCoefAppliable(coef int) bool {
}

func (w *WordStreamValueParser) push(word string, lookAhead string) bool {
log.Printf("+ WordStreamValueParser.push.word %s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
logPrintf("+ WordStreamValueParser.push.word %s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)

if word == "" {
log.Printf(">> WordStreamValueParser.push.condition 0: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 0: [word]%s [ahead] %s", word, lookAhead)
return false
}

if word == w.lang.And && contains(w.lang.AndNums, lookAhead) {
log.Printf(">> WordStreamValueParser.push.condition 1: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 1: [word]%s [ahead] %s", word, lookAhead)
return true
}

word = w.lang.Normalize(word)
if !containsKey(w.lang.Numbers, word) {
log.Printf(">> WordStreamValueParser.push.condition 2: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 2: [word]%s [ahead] %s", word, lookAhead)
return false
}

RELAXED := w.lang.Relaxed
if containsKey(w.lang.Multipliers, word) {
log.Printf(">> WordStreamValueParser.push.condition 3: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 3: [word]%s [ahead] %s", word, lookAhead)
coef := w.lang.Multipliers[word]
log.Printf(">>> WordStreamValueParser.push.coef %d", coef)
logPrintf(">>> WordStreamValueParser.push.coef %d", coef)
if !w.isCoefAppliable(coef) {
log.Printf(">> WordStreamValueParser.push.condition 3.1: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 3.1: [word]%s [ahead] %s", word, lookAhead)
return false
}

Expand All @@ -108,7 +107,7 @@ func (w *WordStreamValueParser) push(word string, lookAhead string) bool {
}
w.grpVal = value * coef
w.lastWord = ""
log.Printf(">> WordStreamValueParser.push.condition 3.2: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 3.2: [word]%s [ahead] %s", word, lookAhead)
return true
}
if coef < w.n000Val {
Expand All @@ -127,36 +126,36 @@ func (w *WordStreamValueParser) push(word string, lookAhead string) bool {
w.grpVal = 0
w.lastWord = ""
} else if w.relaxed && containsKey(RELAXED, word) && lookAhead != "" && strings.HasPrefix(RELAXED[word].Zero, lookAhead) && w.groupExpects(RELAXED[word].One, false) {
log.Printf(">> WordStreamValueParser.push.condition 4: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 4: [word]%s [ahead] %s", word, lookAhead)
w.Skip = RELAXED[word].Zero
w.grpVal = w.grpVal + w.lang.Numbers[RELAXED[word].One]
} else if w.Skip != "" && strings.HasPrefix(w.Skip, word) {
log.Printf(">> WordStreamValueParser.push.condition 5: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 5: [word]%s [ahead] %s", word, lookAhead)
w.Skip = ""
} else if w.groupExpects(word, true) {
log.Printf(">> WordStreamValueParser.push.condition 6: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 6: [word]%s [ahead] %s", word, lookAhead)
if containsKey(w.lang.Hundred, word) {
log.Printf(">> WordStreamValueParser.push.condition 6.1: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 6.1: [word]%s [ahead] %s", word, lookAhead)
if w.grpVal != 0 {
w.grpVal = 100 * w.grpVal
} else {
w.grpVal = w.lang.Hundred[word]
}
} else if containsKey(w.lang.MHundreds, word) {
log.Printf(">> WordStreamValueParser.push.condition 6.2: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 6.2: [word]%s [ahead] %s", word, lookAhead)
w.grpVal = w.lang.MHundreds[word]
} else {
log.Printf(">> WordStreamValueParser.push.condition 6.3: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 6.3: [word]%s [ahead] %s", word, lookAhead)
w.grpVal = w.grpVal + w.lang.Numbers[word]
log.Printf(">>> WordStreamValueParser.push.grpVal %d", w.grpVal)
logPrintf(">>> WordStreamValueParser.push.grpVal %d", w.grpVal)
}
} else {
log.Printf(">> WordStreamValueParser.push.condition 7: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 7: [word]%s [ahead] %s", word, lookAhead)
w.Skip = ""
return false
}

log.Printf(">> WordStreamValueParser.push.condition 8: [word]%s [ahead] %s", word, lookAhead)
logPrintf(">> WordStreamValueParser.push.condition 8: [word]%s [ahead] %s", word, lookAhead)
return true
}

Expand Down Expand Up @@ -189,18 +188,18 @@ func NewWordToDigitParser(lang Language, relaxed bool, signed bool, ordinalThres
}

func (w *WordToDigitParser) GetValue() string {
log.Printf("+ WordToDigitParser.GetValue")
logPrintf("+ WordToDigitParser.GetValue")
return strings.Join(w.the_value, "")
}

func (w *WordToDigitParser) close() {
log.Printf("+ WordToDigitParser.close")
logPrintf("+ WordToDigitParser.close")
if !w.Closed {
if w.InFrac && w.FracBuilder.GetValue() != 0 {
log.Printf(">> WordToDigitParser.close.condition 0: adding FracBuilder %d", w.FracBuilder.GetValue())
logPrintf(">> WordToDigitParser.close.condition 0: adding FracBuilder %d", w.FracBuilder.GetValue())
w.the_value = append(w.the_value, fmt.Sprint(w.FracBuilder.GetValue()))
} else if !w.InFrac && w.IntBuilder.GetValue() != 0 {
log.Printf(">> WordToDigitParser.close.condition 1: adding IntBuilder %d", w.IntBuilder.GetValue())
logPrintf(">> WordToDigitParser.close.condition 1: adding IntBuilder %d", w.IntBuilder.GetValue())
w.the_value = append(w.the_value, fmt.Sprint(w.IntBuilder.GetValue()))
}
w.Closed = true
Expand All @@ -218,7 +217,7 @@ func (w *WordToDigitParser) atStart() bool {
}

func (w *WordToDigitParser) the_push(word string, lookAhead string) bool {
log.Printf("🌀 >> inFrac %v [word] %s [lookAhead] %s [lastWord] %s", w.InFrac, word, lookAhead, w.lastWord)
logPrintf("🌀 >> inFrac %v [word] %s [lookAhead] %s [lastWord] %s", w.InFrac, word, lookAhead, w.lastWord)
if w.InFrac {
builder := w.FracBuilder
return builder.push(word, lookAhead)
Expand All @@ -234,21 +233,21 @@ func (w *WordToDigitParser) isAlone(word string, nextWord string) bool {

func (w *WordToDigitParser) push(word string, lookAhead string) bool {
if w.Closed || w.isAlone(word, lookAhead) {
log.Printf(">> WordToDigitParser.push.condition 0:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
logPrintf(">> WordToDigitParser.push.condition 0:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
w.lastWord = word
return false
}

if w.Signed && containsKey(w.Lang.Sign, word) && containsKey(w.Lang.Numbers, lookAhead) && w.atStart() {
log.Printf(">> WordToDigitParser.push.condition 1:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
logPrintf(">> WordToDigitParser.push.condition 1:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
w.the_value = append(w.the_value, w.Lang.Sign[word])
} else if contains(w.Lang.Zero, word) && w.atStartOfSeq() && lookAhead != "" && strings.Contains(w.Lang.DecimalSep, lookAhead) {
log.Printf(">> WordToDigitParser.push.condition 2:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
logPrintf(">> WordToDigitParser.push.condition 2:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
} else if contains(w.Lang.Zero, word) && w.atStartOfSeq() {
log.Printf(">> WordToDigitParser.push.condition 3:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
logPrintf(">> WordToDigitParser.push.condition 3:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
w.the_value = append(w.the_value, "0")
} else if w.the_push(w.Lang.Ord2Card(word), lookAhead) {
log.Printf(">> WordToDigitParser.push.condition 4:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
logPrintf(">> WordToDigitParser.push.condition 4:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
value2Add := ""
if w.IntBuilder.GetValue() > w.OrdinalThreshold {
digits := 0
Expand All @@ -264,22 +263,22 @@ func (w *WordToDigitParser) push(word string, lookAhead string) bool {
w.the_value = append(w.the_value, value2Add)
w.Closed = true
} else if (word == w.Lang.DecimalSep || contains(strings.Split(w.Lang.DecimalSep, ","), word)) && (containsKey(w.Lang.Numbers, lookAhead) || contains(w.Lang.Zero, lookAhead)) && !w.InFrac {
log.Printf(">> WordToDigitParser.push.condition 5:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
logPrintf(">> WordToDigitParser.push.condition 5:[word]%s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
if w.GetValue() == "" {
w.the_value = append(w.the_value, fmt.Sprint(w.IntBuilder.GetValue()))
}
w.the_value = append(w.the_value, w.Lang.DecimalSYM)
w.InFrac = true
} else if !w.the_push(word, lookAhead) {
log.Printf(">> WordToDigitParser.push.condition 6:[word] %s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
logPrintf(">> WordToDigitParser.push.condition 6:[word] %s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
if w.Open {
w.close()
}
w.lastWord = word
return false
}

log.Printf(">> WordToDigitParser.push.condition 7:[word] %s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)
logPrintf(">> WordToDigitParser.push.condition 7:[word] %s [ahead] %s [lastWord] %s", word, lookAhead, w.lastWord)

w.Open = true
w.lastWord = word
Expand Down
14 changes: 14 additions & 0 deletions itn/utils.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
package itn

import "log"

func contains(slice []string, word string) bool {
for _, v := range slice {
if v == word {
Expand All @@ -13,3 +15,15 @@ func containsKey[T int | string | RelaxTuple](dict map[string]T, key string) boo
_, ok := dict[key]
return ok
}

var DEBUG = false

func SetDebug(debug bool) {
DEBUG = debug
}

func logPrintf(format string, args ...interface{}) {
if DEBUG {
log.Printf(format, args...)
}
}

0 comments on commit e0b34f0

Please sign in to comment.