@minto-ai/text-stream-slicer
Version:
实时将 Markdown 文本流智能切分为可朗读句子。
79 lines (78 loc) • 3.1 kB
TypeScript
/**
* 段落构建器:文本标记化与段落切分,并支持剩余标记缓存输出。
*
* 核心规则:
* - 最小段落长度:10 个标记单元(非字符)
* - 段落结束触发:中文句末标点 [。!?;] 或英文句末标点 [.!?;]
* - 段落合并:句末标点后紧跟空白或成对闭合符
* - 跨次调用:先拼接前次剩余标记与新标记,再统一切分
*/
export declare class ParagraphsBuilder {
private readonly CHINESE_CHAR_REGEX;
private readonly CHINESE_PUNCTUATION_REGEX;
private readonly CHINESE_PARAGRAPH_END_REGEX;
private readonly ENGLISH_WORD_START_REGEX;
private readonly ENGLISH_WORD_CONTINUE_REGEX;
private readonly ENGLISH_PUNCTUATION_REGEX;
private readonly ENGLISH_PARAGRAPH_END_REGEX;
private readonly SPACE_CHAR_REGEX;
private readonly DIGIT_REGEX;
private readonly DECIMAL_REGEX;
/**
* 成对闭合符:包括中英文括号、引号、书名号等
* 中文:)】》』」’”
* 英文:")']}
*/
private readonly TRAILING_CLOSER_REGEX;
private readonly MIN_PARAGRAPH_LENGTH;
private pendingTokens;
/**
* 将输入文本转换为文本标记。
*
* 标记化规则:
* - 中文字符:单个字符作为一个标记
* - 中文标点:单个标点作为一个标记
* - 英文单词:连续英文字母,支持缩写撇号('’)和连字符(-)
* - 数字序列:支持小数点,如 22.5 作为一个完整数字标记
* - 空白字符:空格、制表符等作为一个标记
* - 其他字符:作为未知类型标记
*
* @param text 原始文本
* @returns 标记化后的文本标记数组
*/
private textToTokens;
/**
* 文本标记转换为段落,并更新 pendingTokens。
*
* 跨次调用缓存逻辑:
* 1. 先将前次剩余标记(pendingTokens)与本次新标记拼接
* 2. 对拼接后的完整标记序列进行切分判断
* 3. 未达切分条件的标记缓存到 pendingTokens 供下次使用
*
* @param tokens 文本标记数组
* @returns 段落数组(每段为 Token[])
*/
private tokenToParagraphs;
/**
* 根据输入文本构建段落列表,并在必要时输出剩余标记。
*
* @param text 输入文本
* @param includeRemaining 是否包含待处理的剩余标记
* @returns 段落数组(每段为字符串)
*/
build(text: string, includeRemaining: boolean): string[];
/**
* 重置段落构建器,清空内部 pendingTokens 缓存。
* 用于单例模式下重复调用时确保状态干净。
*/
reset(): void;
}
/**
* 获取或创建段落构建器单例实例。
* 每次返回前都会重置内部状态,确保重复调用时状态干净。/**
* 获取或创建段落构建器单例实例。
* 每次返回前都会重置内部状态,确保重复调用时状态干净。
*
* @returns 段落构建器实例
*/
export declare function createParagraphs(): ParagraphsBuilder;