@echogarden/text-segmentation

中文文档
0.8.1发布于 2026/09/02MITTypeScriptES Module近 30 天下载 1.6万

用于多语种词,短语和句子分割的库.

中文使用文档
文档目录11 节
  1. 安装
  2. 使用量
  3. 拆分为单词
  4. 语言混合物
  5. 获取详细的元数据
  6. 分词、短语和句子
  7. 分割预定义的单词序列
  8. 算法大纲
  9. 单词分割
  10. 句子和短语分割
  11. 许可证

Echogarden 文本分割库

一个为自然语言文本提供单词,短语和句子分割的库.

  • 满 多语种。覆盖所有语言和书写系统,作为Unicode字符。 需要时,使用 Web Assembly 端口 会 议 日 程 和 议 程 ICU C++ 计算机 图书馆 (如果有的话)处理难于分割的东亚语言,如中文、日文、泰文和高棉文
  • 部分 不同语言的混合物,包括不同脚本的混合物,如汉语,西里尔语和拉丁语,都在一个句子或短语中,不需要明确指定特定语言
  • 包括 内置压制清单 用于特定语言的缩写和特殊词型。 目前包括的语文有英文、德文、西班牙文、法文、意大利文、葡萄牙文和俄文,大多取自《公约》第2条 JSON数据集
  • 接受 用户提供的压制列表
  • 这么快。对于大多数语言来说,单词分割大多通过单个正则表达式进行,为给定的选项和压制集动态构建. 处理大部分是在 JavaScript 正则表达式引擎内完成,或者在优化后的WebGathers 二进制内完成
  • 在类型脚本中写入

安装

npm install @echogarden/text-segmentation

为了能够精细地分解出汉语,日语,泰语和高棉语的单词,安装这个额外的包:

npm install @echogarden/icu-segmentation-wasm

(单位:千美元)@echogarden/icu-segmentation-wasm 是 27 MB 软件包,并设定为 同伴依赖。由于大小原因,它不是默认安装的,以方便可能不需要它的部署——特别是浏览器)

使用量

拆分为单词

import { splitToWords } from '@echogarden/text-segmentation'

const wordSequence: WordSequence =
    await splitToWords('Hello, world! How are you doing today?', { language: 'en' })

console.log(wordSequence.words)

打印一个单词列表(包括空格和通点):

['Hello', ',', ' ', 'world', '!', ' ', 'How',' ', 'are', ' ', 'you', ' ', 'doing', ' ', 'today', '?']

语言混合物

提供的语言选项类似 language: 'en' 仅用于装入抑制词典。 您仍可在同一输入文本中包含不同语言和脚本的混合物:

await splitToWords('Hello world! Привет мир! 你好世界!')

生产 :

['Hello', ' ', 'world', '!', ' ', 'Привет', ' ', 'мир', '!', ' ', '你好', '世界', '!']

获取详细的元数据

为了获得更详细的信息,

console.log(wordSequence.entries)

打印对象列表,包括每个字的元数据:

[
    { text: 'Hello', startOffset: 0, endOffset: 5, isPunctuation: false },
    { text: ',', startOffset: 5, endOffset: 6, isPunctuation: true },
    { text: ' ', startOffset: 6, endOffset: 7, isPunctuation: true },
    { text: 'world', startOffset: 7, endOffset: 12, isPunctuation: false },
    { text: '!', startOffset: 12, endOffset: 13, isPunctuation: true },
    { text: ' ', startOffset: 13, endOffset: 14, isPunctuation: true },
    { text: 'How', startOffset: 14, endOffset: 17, isPunctuation: false },
    { text: ' ', startOffset: 17, endOffset: 18, isPunctuation: true },
    { text: 'are', startOffset: 18, endOffset: 21, isPunctuation: false },
    { text: ' ', startOffset: 21, endOffset: 22, isPunctuation: true },
    { text: 'you', startOffset: 22, endOffset: 25, isPunctuation: false },
    { text: ' ', startOffset: 25, endOffset: 26, isPunctuation: true },
    { text: 'doing', startOffset: 26, endOffset: 31, isPunctuation: false },
    { text: ' ', startOffset: 31, endOffset: 32, isPunctuation: true },
    { text: 'today', startOffset: 32, endOffset: 37, isPunctuation: false },
    { text: '?', startOffset: 37, endOffset: 38, isPunctuation: true }
]

分词、短语和句子

const result: SegmentationResult =
    await segmentText(`Hello, world! How are you doing today?`)

result 是一个嵌入对象,其中包含给定文本中的句子、短语和词的分解。 它由这些类型脚本描述:

interface SegmentationResult {
    words: WordSequence
    sentences: Sentence[]
}

interface Sentence {
    text: string
    charRange: Range
    wordRange: Range
    words: WordSequence

    phrases: Phrase[]
}

interface Phrase {
    text: string
    charRange: Range
    wordRange: Range
    words: WordSequence
}

interface Range {
    start: number
    end: number
}

分割预定义的单词序列

如果你有一个先前存在 WordSequence 对象(或可能是一种被修改的现有形式),可以将其分解为句子和短语,而无需重算词边界:

const result: SegmentationResult = await segmentWordSequence(wordSequence: WordSequence)

这样,也可以指定自定义的单词边界,而词组和句子分割操作将确保断开字符在非平分词的跨度中永远不被识别出.

算法大纲

单词分割

寻找数个被接受的角色序列模式中的一个,并认定该模式为单个单词.

有几种公认的模式,按此顺序加以评价:

  • 用户提供的抑制
  • 语言特有压制. 例如,在英文中,它包括缩略语,例如: Mr., (中文(简体) ), Mrs., (中文(简体) ), e.g., (中文(简体) ), i.e, (中文(简体) ), etc.,或者收缩类似和 'cause, (中文(简体) ), 'bout 英语, 'n 南非语
  • 名词压制(英語:Noun spressions),以所有语言共享,如品牌名称,缩写和编程语言等. 实例: C#, (中文(简体) ), F#, (中文(简体) ), C++, (中文(简体) ), Yahoo!, (中文(简体) ), Toys"R"Us, (中文(简体) ), Dunkin', (中文(简体) ), Ke$ha, (中文(简体) ), Sky+, (中文(简体) ), I/O, (中文(简体) ), A/C, (中文(简体) ), A/V
  • 顶级域, 如 .com, (中文(简体) ), .org, (中文(简体) ), .net (也作为名词加倍) .NET (如“.NET框架”)
  • 数字图案,由由各种分隔符字符分隔的位数序列组成,如小数分隔符 3.14, (中文(简体) ), 3,14成千上万的分离者喜欢 233,421 (单位:千美元),, (中文(简体) ), 233.421 (单位:千美元).)或(或) 233 421 (单位:千美元) 。可选 - 或者说 + 标志像 -34,534.123, (中文(简体) ), +43 345,344,或科学标记,如 1.554e-34
  • 时间规律 15:12 财务报告和审定财务报表 06:34:23
  • 日期图案 10/15/2021 (目前已停用)
  • 尺寸模式,如 53x545x76
  • 百分比模式,即数字模式之前或之后 %一样 53.243% 或者说 %34.12
  • 货币模式 $101.25, (中文(简体) ), €50, (中文(简体) ), 20£, (中文(简体) ), -53.23¥,与百分比图案一样,数字图案前有或后有货币符号
  • 爱莫吉像..
  • 缩写图案如 Y.M.C.A: 如果有单个的序列, 这些模式会自动匹配( 不需要特殊压制) . 在单个字母之间交替( 如 x.y.z),可选,字符之间可能有一个空格,比如: x. y. z.
  • 点连接的单词序列 abc.def.g12
  • 强调连接的单词序列 abc_def_g12
  • 间接连接的单词序列 abc·def·g12
  • 终于: 由字母字符组成的单词字符序列(Unicode类) Letter),标记字符( Unicode 类别) Mark)或数字字符( Unicode 分类) Decimal_Number)),其中可能包括诸如: ' 财务报告和审定财务报表 ’ 和内在分离者 -, (中文(简体) ), _ ·

目前的限制数字 :

  • 目前没有对前作或后作的apostropes的一般识别,比如英语占有式复数"兄弟的朋友"或"外交官的合同". 原因:这需要大字典或更精密的语言理解,因为apostrophe一般与一出一出引文模糊.

含有汉语、日语、泰语或高棉语字符的字词的进一步分解

这需要 @echogarden/icu-segmentation-wasm 要设置的软件包 手动 已安装.

  • 标出以前确定的每个字段
  • 检查字段是否包含至少一个属于支持的东亚语言字符范围的代码点
  • 在发现的第一个匹配上装入 ICU 模块( 因为启动延迟了大约 ) 40ms - 说吧 80ms,该模块仅在绝对需要时才被装入)
  • 使用 ICU 库进一步分割字段

句子和短语分割

句子分割数字 :

  • 拆分为单词, 或使用预先提供的单词序列
  • 识别句尾词, 如 ., (中文(简体) ), 。, (中文(简体) ), ?, (中文(简体) ), ?, (中文(简体) ), !, (中文(简体) ), ! 或换行符,字段外,并据此识别句子边界
  • 扩展句子的跨度,以任何可能的后缀字符,在结束字符之后,例如 ”, (中文(简体) ), ’, (中文(简体) ), ), (中文(简体) ), ], (中文(简体) ), }, (中文(简体) ), »,换行符或其他空格

词组分割数字 :

  • 检测到的句子
  • 在每一句中,指明短语分隔符,例如 ,, (中文(简体) ), 、, (中文(简体) ), ,, (中文(简体) ), ،, (中文(简体) ), ;, (中文(简体) ), ;, (中文(简体) ), :, (中文(简体) ), :, (中文(简体) ), — 外部单词跨度, 以及基于它们的分词
  • 将短语的长度与任何后端的分点字符相扩展,直到包含句子的结尾

许可证

麻省理工学院

版本与发布记录

@echogarden/text-segmentation 共发布 15 个版本,首次发布于 2024/11/29;过去 12 个月发布了 5 个版本。

版本发布日期距今
0.8.1latest2026/09/022 个月前
0.8.02026/08/302 个月前
0.7.02026/07/243 个月前
0.6.02026/07/233 个月前
0.5.02026/07/203 个月前
0.4.12025/08/311.2 年前

关于 @echogarden/text-segmentation 的常见问题

@echogarden/text-segmentation 是什么?

用于多语种词,短语和句子分割的库.

如何安装 @echogarden/text-segmentation?

在项目目录运行 npm install @echogarden/text-segmentation,或使用 pnpm add / yarn add / bun add。

@echogarden/text-segmentation 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@echogarden/text-segmentation 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@echogarden/text-segmentation 可以商用吗?

@echogarden/text-segmentation 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@echogarden/text-segmentation 的下载量有多少?

根据 npm 官方下载统计,@echogarden/text-segmentation 在 2026/10/13 – 2026/11/11 这 30 天内被下载 15,954 次,日均约 532 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@echogarden/text-segmentation 还在维护吗?

最新版本 0.8.1 发布于 2026/09/02(2 个月前);至今共发布 15 个版本,其中过去 12 个月发布了 5 个;首次发布于 2024/11/29。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。