UNPKG

@minto-ai/text-stream-slicer

Version:

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

93 lines (62 loc) 2.38 kB
# 介绍 实时将 Markdown 文本流智能切分为可朗读句子。 - ✅ 流式处理:逐片段接收,边收边切 - ✅ 智能分段:按中英文句末标点切分,自动过滤 Markdown 与 emoji - ✅ 歧义缓存:小数/句号、未闭合链接尾部缓存,等待后续片段确认 # 安装 ```bash # pnpm pnpm add @minto-ai/text-stream-slicer ``` # 快速开始 ```javascript import TextStreamSlicer from '@minto-ai/text-stream-slicer' const slicer = new TextStreamSlicer() // 流式片段(如 SSE / WebSocket) console.log(slicer.processText('你要')) // [] console.log(slicer.processText('抱我吗?')) // ['你要抱我吗?'] // 输入结束收尾输出 console.log(slicer.processText('', true)) ``` # API ## 实例方法 ### TextStreamSlicer#processText 处理输入的文本片段,结合内部缓存智能切分为可朗读句子。 > processText(text: string, includeRemaining?: boolean): string[] #### 参数 1. `text (string)` 当前收到的文本片段(允许为空字符串) 2. `[includeRemaining=false] (boolean)` 是否收尾输出;`true` 时将剩余缓存一并输出 #### 返回值 - `(string[])` 可朗读的句子数组;无完整句子时返回空数组 # 高级示例 - 流式 SSE 场景 ```javascript import TextStreamSlicer from '@minto-ai/text-stream-slicer' const slicer = new TextStreamSlicer() const evtSource = new EventSource('/chat-sse') evtSource.onmessage = (event) => { const sentences = slicer.processText(event.data) sentences.forEach(s => speak(s)) } evtSource.onerror = () => { const tail = slicer.processText('', true) tail.forEach(s => speak(s)) } ``` - 小数 / 句号歧义 ```javascript import TextStreamSlicer from '@minto-ai/text-stream-slicer' const slicer = new TextStreamSlicer() slicer.processText('停车费') // [] slicer.processText('2') // [] slicer.processText('.') // [] console.log(slicer.processText('3元。', true)) // ['停车费2.3元。'] ``` - Markdown 链接 ```javascript import TextStreamSlicer from '@minto-ai/text-stream-slicer' const slicer = new TextStreamSlicer() slicer.processText('官网') // [] slicer.processText('[链接](https://xx.com)') // [] console.log(slicer.processText('已结束。', true)) // ['官网链接已结束。'] ```