From 639a3978148194631bb9c8617a7b5968e4add487 Mon Sep 17 00:00:00 2001 From: renzhiyuan <465386466@qq.com> Date: Thu, 24 Jul 2025 18:18:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=94=E5=9B=9E=E4=B8=BA=E5=AD=97=E8=8A=82js?= =?UTF-8?q?on=EF=BC=8C=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ai.go | 38 +++++++++++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/ai.go b/ai.go index bc04b15..50b46e4 100644 --- a/ai.go +++ b/ai.go @@ -6,14 +6,28 @@ import ( "gitea.cdlsxd.cn/self-tools/l_ai_excel_header_match/doubao" "github.com/iancoleman/orderedmap" "strings" + "unicode" ) func ExcelMatch(ctx context.Context, selfExcelHeader, matchToExcelHeader []string, key string, model string) (resultByte []byte, err error) { - var result map[string]interface{} + var ( + result map[string]interface{} + specialChars = make(map[string]string) + withOutSpecialMatchToExcelHeader = make([]string, len(matchToExcelHeader)) + ) + for k, v := range matchToExcelHeader { + var char = v + char, isChange := cleanString(v) + if isChange { + specialChars[v] = char + } + withOutSpecialMatchToExcelHeader[k] = char + } + modelObj := doubao.NewDouBao(model, key) text := []string{ "第一张表表头为key,第二张表表头为value,如果未匹配到则返回空", - "-第一个表头:[" + strings.Join(matchToExcelHeader, ",") + "]", + "-第一个表头:[" + strings.Join(withOutSpecialMatchToExcelHeader, ",") + "]", "-第二个表头:[" + strings.Join(selfExcelHeader, ",") + "]", "-第一张表表头为key,第二张表表头为value,返回一个map映射的json字符串,不需要其他额外的表述以及格式", "-输出的json长度必须和第一张表的长度一致", @@ -27,18 +41,32 @@ func ExcelMatch(ctx context.Context, selfExcelHeader, matchToExcelHeader []strin return nil, err } - return OrderMapWithSlice(result, matchToExcelHeader) + return OrderMapWithSlice(result, withOutSpecialMatchToExcelHeader, specialChars) } -func OrderMapWithSlice(data map[string]interface{}, desiredOrder []string) ([]byte, error) { +func cleanString(s string) (out string, isChange bool) { + var result []rune + for _, ch := range s { + if unicode.IsLetter(ch) || unicode.IsDigit(ch) || unicode.IsSpace(ch) || unicode.IsPunct(ch) { + result = append(result, ch) + } else { + isChange = true + } + } + return string(result), isChange +} + +func OrderMapWithSlice(data map[string]interface{}, desiredOrder []string, specialChars map[string]string) ([]byte, error) { m := orderedmap.New() for _, key := range desiredOrder { if value, exists := data[key]; exists { + if specialReg, ex := specialChars[key]; ex { + key = specialReg + } m.Set(key, value) } } - // 编码为 JSON return json.Marshal(m)