UNPKG

@minto-ai/text-stream-slicer

Version:

实时将 Markdown 文本流智能切分为可朗读句子。

79 lines (78 loc) 3.1 kB
/** * 段落构建器:文本标记化与段落切分,并支持剩余标记缓存输出。 * * 核心规则: * - 最小段落长度: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;