feat: enhance TTS request handling by refactoring methods, adding OpenAI request support, and improving text segmentation

This commit is contained in:
王锦强
2025-03-16 20:24:04 +08:00
parent 6fa5c1f467
commit 9100930d3a
5 changed files with 348 additions and 348 deletions

View File

@@ -12,6 +12,7 @@ import (
"net/url"
"strings"
"time"
"unicode/utf8"
"github.com/google/uuid"
"github.com/sirupsen/logrus"
@@ -97,3 +98,62 @@ func Sign(urlStr string) string {
signBase64 := base64.StdEncoding.EncodeToString(secretKey)
return fmt.Sprintf("MSTranslatorAndroidApp::%s::%s::%s", signBase64, formattedDate, uuidStr)
}
// SplitAndFilterEmptyLines 拆分文本并过滤掉空行
func SplitAndFilterEmptyLines(text string) []string {
// 按换行符拆分
lines := strings.Split(text, "\n")
var result []string
for _, line := range lines {
trimmed := strings.TrimSpace(line)
if trimmed != "" {
result = append(result, trimmed)
}
}
return result
}
// MergeStringsWithLimit 会将字符串切片依次累加,直到总长度 ≥ minLen。
// 但如果再合并下一段后会超过 maxLen则提前结束本段合并放入结果。
// 然后继续新的一段合并。
func MergeStringsWithLimit(strs []string, minLen int, maxLen int) []string {
var result []string
for i := 0; i < len(strs); {
// 如果已经没有更多段落,直接退出
if i >= len(strs) {
break
}
// 从当前段开始合并
currentBuilder := strings.Builder{}
currentBuilder.WriteString(strs[i])
i++
for i < len(strs) {
currentLen := utf8.RuneCountInString(currentBuilder.String())
// 如果当前已达(或超过) minLen先行结束本段合并
if currentLen >= minLen {
break
}
// 检查添加下一个段落后是否会超过 1.2 × minLen
nextLen := utf8.RuneCountInString(strs[i])
if currentLen+nextLen > int(float64(minLen)*1.2) {
// 加上下一个会超标,则结束合并
break
}
// 如果未超标,则继续合并这个段
currentBuilder.WriteString("\n")
currentBuilder.WriteString(strs[i])
i++
}
// 本段合并结束,加入结果
result = append(result, currentBuilder.String())
}
return result
}