nub/internal/tokens/estimate.go
Tom a97013d876 initial commit
- v 0.1.0 siehe CHANGELOG.md
2026-07-25 11:08:01 +02:00

32 lines
728 B
Go

// Package tokens schätzt Tokenzahlen ohne echten Tokenizer (E-09).
// Kalibrierung gegen die tatsächliche usage aus jeder API-Antwort folgt in M4.
package tokens
import "unicode"
// Estimate schätzt die Tokenzahl eines Texts: len/4 für lateinischen Text,
// len/3 für überwiegend CJK-Text (dort ist ein Token meist ~1 Zeichen).
func Estimate(s string) int {
if s == "" {
return 0
}
runes := []rune(s)
cjk := 0
for _, r := range runes {
if isCJK(r) {
cjk++
}
}
n := len(runes)
if cjk*2 > n {
return n/3 + 1
}
return n/4 + 1
}
func isCJK(r rune) bool {
return unicode.Is(unicode.Han, r) ||
unicode.Is(unicode.Hiragana, r) ||
unicode.Is(unicode.Katakana, r) ||
unicode.Is(unicode.Hangul, r)
}