# core-contract(子模块规范) ## 子模块名称 core-contract(核心口径与契约) ## 目标描述 定义并固化跨端一致的“基础口径”,为后续断点生成、搜索与评分提供统一契约,避免实现偏差: - **索引体系**:EN/TC 的 token 与断点 `pos` 语义 - **文本重组**:从 token 区间稳定重组回行文本 - **规范化**:空白归一化策略(默认折叠空白、去首尾) - **EN 关键词命中规则**:全词等值匹配(`lowercase → strip 两端常见标点 → 等值比较`),禁止 substring/contains - **配置与版本**:`configVersion` 的语义与回溯字段;全端一致的默认值入口 - **确定性比较**:layout tie-break 的字典序比较口径(作为后续模块复用工具) 本模块不负责“换行搜索”,只负责**定义数据结构与基础函数**。 ## 输入/输出定义 ### 输入 - `text: string` - `lang: 'TC' | 'EN'` - `options?: { preserveRawSeparators?: boolean }` - `config: { punctuationStripSetEN: string[]; whitespacePolicy: 'NORMALIZE' | 'PRESERVE' }` ### 输出 - `normalizedText: string` - `tokens: Array<{ text: string; start: number; end: number }>` - EN:token 仅为 WORD(不产生 SPACE token;标点视为词内字符) - TC:token 为 grapheme cluster(具体分割由 `grapheme-segmentation` 模块实现/提供) - `rawSeparators?: string[]` - 可选:当选择保留原始空白时,输出 token 间分隔符映射 - 基础工具函数(逻辑输出): - `joinTokens(start, end) -> string` - `normalizeENKeyword(tokenText) -> string` - `matchENKeyword(tokenText, keyword) -> boolean` ## 验收标准(可验证) - **索引语义一致**: - EN:`"I am so tired"` tokens=`[I, am, so, tired]`,断点 `pos=2` 必然切为 `"I am"` / `"so tired"` - TC:断点 `pos` 表示在第 `pos` 个 grapheme 之前断开 - **EN 标点极简派一致**: - `"tired."` 作为一个 token;断点只允许在词与词之间 - **EN 关键词命中无误伤**: - keyword=`"but"`:`"but,"` 命中;`"rebuttal"` 不命中 - **空白归一化确定性**: - 输入含多空格/首尾空白时,输出 `normalizedText` 可预测且稳定 - **工具函数确定性**:相同输入在多次调用与多端实现中输出一致 ## 依赖与关联 - **被依赖**:`breakpoint-candidates`、`scoring-tiebreak`、`search-engine-*`、`overflow-fallback`、`integration` - **依赖**:TC token 分割依赖 `grapheme-segmentation`