Project Icon

budoux

独立小巧且多语言支持的机器学习换行工具

BudouX 是一款独立且小巧的机器学习换行整理工具,无需依赖第三方分词器,支持日语、简体中文、繁体中文和泰语。它占用空间小,约15KB,可用于客户端,并支持与HTML输入的集成。使用者可以通过提供数据集训练任何语言的模型,适用于Python、JavaScript和Java编程语言。该工具旨在解决CJK语言在网页排版中的分行问题,提高可读性。

<!-- markdownlint-disable MD014 -->
# BudouX

[![PyPI](https://img.shields.io/pypi/v/budoux?color=blue)](https://pypi.org/project/budoux/) [![npm](https://img.shields.io/npm/v/budoux?color=yellow)](https://www.npmjs.com/package/budoux) [![Maven Central](https://img.shields.io/maven-central/v/com.google.budoux/budoux)](https://mvnrepository.com/artifact/com.google.budoux/budoux)

独立的。小巧。语言中立。

BudouX 是 [Budou](https://github.com/google/budou) 的升级版,使用机器学习技术的换行组织工具。

![Example](https://yellow-cdn.veclightyear.com/2b54e442/0e94e829-eda8-4704-b937-6bf273d2e629.png)

它是 **独立的**。它无需依赖第三方分词器,比如 Google Cloud 自然语言 API。

它是 **小巧的**。它的体积只有大约 15 KB,包括其机器学习模型。即使在客户端使用也是合理的。

它是 **语言中立的**。通过向 BudouX 的训练脚本提供数据集,您可以为任何语言训练模型。

最后但并非最不重要的是,BudouX 支持 HTML 输入。

## 演示

<https://google.github.io/budoux>

## 默认支持的自然语言

- 日语
- 简体中文
- 繁体中文
- 泰语

## 支持的编程语言

- Python
- [JavaScript](https://github.com/google/budoux/tree/main/javascript/)
- [Java](https://github.com/google/budoux/tree/main/java/)

## Python 模块

### 安装

```shellsession
$ pip install budoux

用法

您可以通过向解析器提供句子来获得短语列表。 获取解析器的最简单方法是加载每种语言的默认解析器。

日语:

import budoux
parser = budoux.load_default_japanese_parser()
print(parser.parse('今日は天气です。'))
# ['今日は', '天气です。']

简体中文:

import budoux
parser = budoux.load_default_simplified_chinese_parser()
print(parser.parse('今天是晴天。'))
# ['今天', '是', '晴天。']

繁体中文:

import budoux
parser = budoux.load_default_traditional_chinese_parser()
print(parser.parse('今天是晴天。'))
# ['今天', '是', '晴天。']

泰语:

import budoux
parser = budoux.load_default_thai_parser()
print(parser.parse('วันนี้อากาศดี'))
# ['วัน', 'นี้', 'อากาศ', 'ดี']

您还可以翻译 HTML 字符串以将短语包裹在不间断的标记中。 默认的解析器使用零宽度空格 (U+200B) 来分隔短语。

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 的模型文件是包含机器学习训练提取的特征及其得分对的 JSON 文件。 每个得分表示在特定点断句的重要性。

有关 JavaScript 模型的更多详细信息,请参阅 JavaScript 模块 README

CLI

您还可以使用 budoux 命令在终端上格式化输入。

$ budoux 本日は晴天です。 # 默认: 日语
本日は
晴天です。

$ budoux -l ja 本日は晴天です。
本日は
晴天です。

$ budoux -l zh-hans 今天天气晴朗。
今天
天气
晴朗。

$ budoux -l zh-hant 今天天氣晴朗。
今天
天氣
晴朗。

$ budoux -l th วันนี้อากาศดี
วัน
นี้
อากาศ
ดี
$ echo $'本日は晴天です。\n明日は曇りでしょう。' | budoux
本日は
晴天です。
---
明日は
曇りでしょう。
$ budoux 本日は晴天です。 -H
<span style="word-break: keep-all; overflow-wrap: anywhere;">本日は\u200b晴天です。</span>

请注意,上述示例中的分隔符表示为 \u200b 仅用于说明目的,但实际输出是一个不可见的字符串,因为它是零宽度空格。

如果您想查看帮助信息,可以运行 budoux -h

$ budoux -h
usage: budoux [-h] [-H] [-m JSON | -l LANG] [-d STR] [-V] [TXT]

BudouX 是 Budou 的继任者,
使用机器学习技术的换行整理工具。

位置参数:
  TXT                    文本 (默认: 无)

可选参数:
  -h, --help             显示此帮助信息并退出
  -H, --html             HTML 模式 (默认: False)
  -m JSON, --model JSON  自定义模型文件路径 (默认: /path/to/budoux/models/ja.json)
  -l LANG, --lang LANG   自定义模型的语言 (默认: 无)
  -d STR, --delim STR    文本模式中的输出分隔符 (默认: ---)
  -V, --version          显示程序版本号并退出

支持的 `-l` `--lang` 语言:
- ja
- zh-hans
- zh-hant
- th

警告

BudouX 支持 HTML 输入并输出带有标记的 HTML 字符串以包裹短语,但它并不意味着用于 HTML 消毒。BudouX 不会对任何输入进行消毒。 恶意的 HTML 输入会产生恶意的 HTML 输出。如果您不信任输入内容,请使用合适的消毒库。

背景

英文文本有许多线索,比如空格和连字符,可以实现漂亮且可读的换行。然而,一些 CJK 语言缺乏这些线索,因此处理起来特别困难。换行可能会随机发生,并且通常在没有更仔细处理的情况下出现在词或短语的中间。这是 Web 排版中的一个长期问题,导致可读性下降。

2016 年,Budou 被提出作为这个问题的解决方案。它自动将 CJK 句子翻译成带有词汇短语包裹在不间断标记中的 HTML,从而以语义上控制换行。Budou 在某种程度上解决了这个问题,但它在与现代 web 生产工作流程的集成中仍存在一些问题。

将 Budou 应用于网站的最大障碍在于它依赖第三方分词器。通常,分词器是一个庞大的程序,不可能为每个网页请求下载。考虑到速度和成本,为每个句子请求云端分词服务也是不可取的选择。这就是为什么我们需要一个独立的换行整理工具,配备自己的分词引擎,并且足够小,可以在客户端的 JavaScript 代码中捆绑使用。

BudouX 是 Budou 的继任者,设计目的是无需麻烦就可以集成到您的网站中。

工作原理

BudouX 使用 AdaBoost 算法 将句子分割成短语,将任务视为一个二元分类问题,用于预测是否在所有字符之间分割。它使用诸如断点周围的字符、它们的 Unicode 块及其组合等特征来进行预测。输出的机器学习模型编码为 JSON 文件,存储特征与其重要性得分的配对。BudouX 解析器读取模型文件来构建分词器并将输入句子翻译成短语列表。

构建自定义模型

通过准备目标语言的训练数据,您可以为任意语言构建自己的自定义模型。 训练数据集是一个大型文本文件,包含由分隔符符号 "▁" (U+2581) 隔开的短语,例如下文所示。

私は▁遅刻魔で、▁待ち合わせに▁いつも▁遅刻してしまいます。
メールで▁待ち合わせ▁相手に▁一言、▁「ごめんね」と▁謝れば▁どうにか▁なると▁思っていました。
海外では▁ケータイを▁持っていない。

假设将文本文件保存为 mysource.txt,可以通过运行以下命令构建自己的自定义模型。

$ pip install .[dev]
$ python scripts/encode_data.py mysource.txt -o encoded_data.txt
$ python scripts/train.py encoded_data.txt -o weights.txt
$ python scripts/build_model.py weights.txt -o mymodel.json

请注意,train.py 的完成时间取决于您的计算机资源。 好消息是训练算法是一个 anytime algorithm,因此即使中断执行,您也可以获得权重文件。在这种情况下,您可以通过将该权重文件传递给 build_model.py 构建有效的模型文件。

从日本 KNBC 语料库构建训练数据集

默认的日语模型 (budoux/models/ja.json) 是使用 KNBC 语料库 构建的。 您可以通过运行以下命令从语料库创建训练数据集,以下示例中我们命名为 source_knbc.txt:

$ curl -o knbc.tar.bz2 https://nlp.ist.i.kyoto-u.ac.jp/kuntt/KNBC_v1.0_090925_utf8.tar.bz2
$ tar -xf knbc.tar.bz2  # 解压后得到 KNBC_v1.0_090925_utf8 目录
$ python scripts/prepare_knbc.py KNBC_v1.0_090925_utf8 -o source_knbc.txt

作者

Shuhei Iitsuka

免责声明

这不是谷歌官方支持的产品。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号