# breakpoint-candidates(子模块规范) ## 子模块名称 breakpoint-candidates(候选断点生成与裁剪) ## 目标描述 基于 token 序列生成“可控规模、确定性排序”的候选断点集合(breakpoints),并应用去重、排序与约束过滤,确保后续搜索器复杂度可控且跨端一致。 本模块输出的是“断点候选集合”,不负责“组合搜索选最优”。 ## 输入/输出定义 ### 输入 - `tokens: Token[]` - `lang: 'TC' | 'EN'` - `maxLines: number` - `constraints?: { protectedPhrases?: string[]; forbiddenBreakRanges?: Array<{ start: number; end: number }> }` - `config: { tcMaxCandidateBreaks: number; tcPunctuations: string[]; balanceRange: number }` ### 输出 - `breakpoints: Array<{ pos: number; kind: 'PUNCT' | 'SPACE' | 'BALANCE' | 'OTHER'; priority: number }>` - **pos**:token 边界索引(0..N) - **排序**:按 `pos` 升序(最终输出必须确定性) - `meta?: { pruned: boolean; originalCount: number; finalCount: number }` ## 验收标准(可验证) - **EN 口径**: - tokens 仅为 WORD(不生成 SPACE token),断点仅存在于词间 - 每个词边界产生 `kind=SPACE` 的候选断点(按配置可做裁剪,但必须确定性) - **TC 口径**: - 标点后断点 `kind=PUNCT` 优先级最高 - 空格后断点 `kind=SPACE` 次之 - BALANCE 断点:围绕理想切分点附近生成少量断点(允许落在短语 span 内,是否可用交给评分惩罚) - **去重/排序/过滤确定性**: - 同一 `pos` 多来源断点:保留 priority 更高者 - 输出按 `pos` 升序 - `forbiddenBreakRanges` 命中者必定被剔除 - **规模上限生效**: - TC 输出候选断点数不超过 `tcMaxCandidateBreaks` - 截断策略确定性(按 priority + 距离理想位置等固定规则) ## 依赖与关联 - **依赖**:`core-contract`(token 与索引语义)、`grapheme-segmentation`(TC tokens) - **被依赖**:`search-engine-app`、`search-engine-widget`