ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

免费开源的WPS AI插件 察元AI助手:normalizeTextWithIndexMap 与 raw 坐标映射

免费开源的WPS AI插件 察元AI助手:normalizeTextWithIndexMap 与 raw 坐标映射 摘要该函数将 \r\n 与单独 \r 规范为 \n并维护 indexMap、spanMap供 mapNormalizedRangeToRawRange 将模型给出的规范化下标映射回 Word 原始下标。批注定位错误时应优先检查是否混用了规范化前后坐标。关键词indexMap;CRLF;范围映射扩展阅读与维护提示本篇围绕「normalizeTextWithIndexMap 与 raw 坐标映射」组织材料。仓库内与主题最直接相关的检索词包括indexMap、CRLF、范围映射。建议在阅读正文所列片段后用 IDE 全局搜索这些符号沿 import 与调用栈向上追问「谁在什么时机调用」而不是只记住单文件路径。摘要所概括的要点为该函数将 \r\n 与单独 \r 规范为 \n并维护 indexMap、spanMap供 mapNormalizedRangeToRawRange 将模型给出的规范化下标映射回 Word 原始下标。批注定位错误时应优先检查是否混用了规范化前后坐标。落地到排障时可把现象粗分为三类交叉验证配置是否按预期写入持久化介质WPS COM 上下文是否可用例如是否缺少 ActiveDocument以及网络与证书策略是否拦截了 fetch。本篇涉及的模块通常只覆盖其中一两类需要与相邻篇目拼成完整拼图。教程文件名「29-zuobiao-yingshe-yu-normalizeTextWithIndexMap.md」仅用于导航与排序不等价于源码模块名。若正文中的行号与本地分支不一致多半因合并导致行偏移此时应以函数名、导出名为锚重新检索团队若维护了生成脚本可在变更大段源码后重新运行以保持摘录大致对齐。本文刻意避免对产品能力做营销式承诺所述行为均以当前仓库可见实现为准。若组织策略要求离线或内网模型应在网关、证书与代理层收口而不是假设加载项能绕过浏览器安全模型。若你同时阅读 docs/chayuan-llm-chain-series可先对照其中的总体链路图理解「请求从 UI 到 chatApi」的次序再回到本教程看数据结构、默认值与修改风险面两者互补不重复堆砌功能列表。正文1. 规范化循环逐字符推进双字符换行合并为单 \n。阅读源码摘录时请把它当作「定位入口」而非完整实现同一函数可能在其他分支还有早退条件或 try/catch。修改默认行为前建议用最小文档手工走一遍相关助手或对话框并观察任务清单与日志中的字段是否与预期一致再决定是否做数据迁移或配置重置。// src/utils/documentPositionUtils.js 第1-26行 export function normalizeTextWithIndexMap(text) { const raw String(text || ) let normalized const indexMap [] const spanMap [] for (let i 0; i raw.length; i 1) { const ch raw[i] if (ch \r) { if (raw[i 1] \n) { normalized \n indexMap.push(i) spanMap.push(2) i 1 } else { normalized \n indexMap.push(i) spanMap.push(1) } continue } normalized ch indexMap.push(i) spanMap.push(1) } return { raw, normalized, indexMap, spanMap } }2. 映射到 rawmapNormalizedRangeToRawRange 使用 indexMap[end-1]spanMap[end-1] 计算 rawEnd。阅读源码摘录时请把它当作「定位入口」而非完整实现同一函数可能在其他分支还有早退条件或 try/catch。修改默认行为前建议用最小文档手工走一遍相关助手或对话框并观察任务清单与日志中的字段是否与预期一致再决定是否做数据迁移或配置重置。// src/utils/documentPositionUtils.js 第28-40行 export function mapNormalizedRangeToRawRange(info, start, end) { if (!info?.indexMap?.length || end start) return null const rawStart info.indexMap[start] const rawEnd info.indexMap[end - 1] info.spanMap[end - 1] if (rawStart null || rawEnd null || rawEnd rawStart) return null return { rawText: info.raw.slice(rawStart, rawEnd), text: info.normalized.slice(start, end), rawStart, rawEnd, start: rawStart, end: rawEnd }
返回列表