ITADN

fix: 优化sentenceLayout的兜底分割方式

#62Pull Requesttumuyan 创建于 2026-05-27
T
tumuyancommented
fix #60 顺带把sentenceLayout到底做了什么做一下总结 整个拆分流程分为 **三个阶段**: --- ### 一、主拆分阶段(Level 1–5 递进式) `splitIntoSentences` 根据 `targetCount` 确定最大层级数 `maxLevel`,**逐层**对所有已有片段执行 `splitByLevel`,每层只在上一层的拆分结果上继续细分: | Level | 方法 | 拆分依据 | 用途 | |-------|------|----------|------| | **1** | `splitByPunctuation` | 标点符号 `,。;!?、…·.;,!?` | 以完整标点为界做最天然的分句 | | **2** | `splitByBracketsQuotes` | 成对符号 `「」『』《》【】{}[][]()() "" ''` | 以封闭符号划分语义块 | | **3** | `splitByWesternWords` | 西文连续单词块(多个西文单词组成的短语) | 在 东西混合的文字中分离出西文(也就分离了cjk) | | **4** | `splitCJKBySpace` | 空格 | 拆分 CJK 部分内的空格(如果直接拆分全部中英文空格,会让结果太碎) | | **5** | `splitBySpecialChars` | 特殊分隔符 `::/\||~~` | 这些字符前后的内容往往更加紧密,因此做最终粒度拆分 | **关键行为**: 1. 每次拆分都会先检查当前片段数是否已满足 `targetCount`,满足则提前终止。 2. 如果使用负数,可以指定到拆分的层级,即-3拆分到第三层 3. 除成对符号外,所有切分都让空格、符号跟随到左侧的片段 --- ### 二、补充分割阶段(secondarySplit) 当主拆分后片段数**少于** `targetCount` 时触发。此次的问题就出现在这个阶段。 修复之后英文可以在单词边界拆分,cjk的拆分要差一点(但是符号已经拆过一次了,大概率不会触发太难堪的场景) 基于不加载额外字典的前提,并不能做到太好。 --- ### 三、合并阶段(mergeSentences) 当拆分后片段数**多于** `targetCount` 时触发 ---
合并状态:未合并 4 条评论