46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package l_ai_excel_header_match
|
||
|
||
import (
|
||
"context"
|
||
"encoding/json"
|
||
"gitea.cdlsxd.cn/self-tools/l_ai_excel_header_match/doubao"
|
||
|
||
"strings"
|
||
)
|
||
|
||
func ExcelMatch(ctx context.Context, selfExcelHeader, matchToExcelHeader []string, key string, model string) (resultByte []byte, err error) {
|
||
var result map[string]interface{}
|
||
modelObj := doubao.NewDouBao(model, key)
|
||
text := []string{
|
||
"第一张表表头为key,第二张表表头为value,如果未匹配到则返回空",
|
||
"-第一个表头:[" + strings.Join(matchToExcelHeader, ",") + "]",
|
||
"-第二个表头:[" + strings.Join(selfExcelHeader, ",") + "]",
|
||
"-第一张表表头为key,第二张表表头为value,返回一个map映射的json字符串",
|
||
"-不需要其他额外的表述以及格式",
|
||
}
|
||
res, err := modelObj.GetData(ctx, doubao.Text, func(input string) (string, error) {
|
||
return input, nil
|
||
}, text...)
|
||
|
||
err = json.Unmarshal([]byte(res), &result)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
return OrderMapWithSlice(result, matchToExcelHeader)
|
||
}
|
||
|
||
func OrderMapWithSlice(data map[string]interface{}, desiredOrder []string) ([]byte, error) {
|
||
|
||
var orderedKVs []map[string]interface{}
|
||
for _, key := range desiredOrder {
|
||
if value, exists := data[key]; exists {
|
||
orderedKVs = append(orderedKVs, map[string]interface{}{key: value})
|
||
}
|
||
}
|
||
|
||
// 编码为 JSON
|
||
return json.MarshalIndent(orderedKVs, "", " ")
|
||
|
||
}
|