BudouX 项目介绍
BudouX 是一个由机器学习驱动的换行组织工具,其前身是 Budou。相比于 Budou,BudouX 更加独立、小巧并且具备语言中立性,是在网页应用中优化文字排版的出色工具。
项目特点
- 独立性:BudouX 不依赖于任何第三方词语分词器,如 Google 云自然语言 API。因此,它可以不受外部工具的限制独立运行。
- 小巧精悍:BudouX 的整个机器学习模型仅大约 15 KB,使得它即使在客户端使用,也十分合理。
- 语言中立性:用户可以通过向 BudouX 的训练脚本提供数据集来为任意语言训练模型。
除此之外,BudouX 还支持 HTML 输入,这进一步扩大了其应用范围。
支持的自然语言
预训练模型支持以下语言:
- 日语
- 简体中文
- 繁体中文
- 泰语
对于使用空格分隔单词的韩语用户,可以通过 CSS 属性 word-break: keep-all
来避免单词在行内断开的情况。因此,BudouX 并未专门研发韩语支持,但若需求增大,团队愿意进行探索。
支持的编程语言
BudouX 支持多种编程语言,包括:
- Python
- JavaScript
- Java
Python 模块使用指南
安装
BudouX 可以通过 pip 安装:
$ pip install budoux
使用示例
-
解析句子:可以通过将一个句子传递给解析器来获得短语列表。
例如,解析日语句子:
import budoux parser = budoux.load_default_japanese_parser() print(parser.parse('今日は天気です。')) # 输出: ['今天是', '晴天。']
-
HTML 不换行标记:将 HTML 字符串转换为包含不换行标记的 HTML。
print(parser.translate_html_string('今日は<b>とても天気</b>です。')) # 输出: <span style="word-break: keep-all; overflow-wrap: anywhere;">今日は<b>\u200bとても\u200b天気</b>です。</span>
在上述示例中,
\u200b
表示零宽空格,实际上输出是一个不可见字符。 -
使用自定义模型:如果用户拥有自定义的模型文件,也可通过以下方式使用:
with open('/path/to/your/model.json') as f: model = json.load(f) parser = budoux.Parser(model)
BudouX 还能在终端使用,通过命令行输入来分割句子。
背景
英语文本中,通常有许多有助于排版的线索,如空格和连字符,这使得文本更易于分行。然而对于某些复杂字符集语言(如日语、中文),这些线索相对缺乏,导致行中的换行可能出现在词语中间,影响可读性。BudouX 的前身 Budou 便是为解决这一长期存在的问题而设计的,但由于依赖于外部分词器,使用上存在一些局限性。
BudouX 则以其独立性和足够小的内存使用率,适合嵌入到客户端代码中,改善了这种情况。
工作原理
BudouX 使用AdaBoost算法,通过将分词任务视为一个二分类问题来预测字符间的换行点。它考虑了字符的上下文、Unicode 块以及这些特征的组合,以便做出预测。训练产生的模型以 JSON 文件形式保存,包含特征及其重要性分数的对应关系。BudouX 使用此模型来组织输入句子,将其转换为短语列表。
自定义模型的构建
用户可以通过准备目标语言的训练数据集来构建自定义模型。训练数据集是由短语分隔符 "▁" 分隔的句子组成的文本文件。通过一系列命令行操作,用户可以生成并训练属于自己的模型。
致谢
BudouX 由 Shuhei Iitsuka 开发,感谢他的贡献。需要注意的是,这并不是一个官方支持的谷歌产品。