Ariver
2026-06-30 fdc5c43b2cf8ebc3d67099cfba9936c838281561
privatevoice.src/internal/textproc/textproc.go
@@ -59,8 +59,31 @@
   return strings.TrimSpace(text)
}
func removeSpacesBetweenCJK(text string) string {
   runes := []rune(text)
   buf := make([]rune, 0, len(runes))
   for i := 0; i < len(runes); i++ {
      r := runes[i]
      if unicode.IsSpace(r) {
         j := i
         for j < len(runes) && unicode.IsSpace(runes[j]) {
            j++
         }
         if len(buf) > 0 && j < len(runes) && isCJK(buf[len(buf)-1]) && isCJK(runes[j]) {
            i = j - 1
            continue
         }
      }
      buf = append(buf, r)
   }
   return string(buf)
}
// PostProcess cleans up mixed Chinese-English text from SenseVoice:
//   - Strips special tokens (<|zh|>, <|NEUTRAL|>, etc.)
//   - Removes model-added spaces between CJK characters
//   - Inserts spaces between CJK characters and ASCII letters/digits
//   - Capitalizes the first letter and letters after sentence-ending punctuation
//   - Collapses multiple spaces
@@ -78,6 +101,8 @@
      return text
   }
   text = removeSpacesBetweenCJK(text)
   // Insert spaces at CJK ↔ ASCII alphanumeric boundaries
   runes := []rune(text)
   buf := make([]rune, 0, len(runes)+16)