2 个版本

0.1.2 2020年5月31日
0.1.1 2020年5月30日

#132国际化 (i18n)

BSD-3-Clause

64KB
907

tokenizer_rs

一个纯用 Rust 编写的词分词器。目前有两个分词器。

  1. en - 一个基于空格的分词器,其中每个单词都通过空白分隔
  2. th - 一个基于字典的分词器,使用“最大匹配”算法,并通过最小化未知字符的数量直到找到一些已知单词来处理一些基本未知单词。

它目前支持两个功能门

  • multi-thread - 它将尝试使用多线程进行分词。
  • single-thread - 它将使用单线程。

目前,泰文词分词器支持这两个功能。它使用 Rayon 进行多线程分词。它首先通过空白分隔文本,然后在每个块上,使用 Rayon 并行迭代器在单独的线程上尝试对每个块进行分词。

英语语言实际上尚未利用多线程,但它将支持这两个功能。

默认情况下,它将使用 multi-thread

如何使用

将以下行放入您的 cargo.toml 依赖项部分。例如

[dependencies]
tokenizer = "^0.1"

它将尝试使用多线程进行分词。

要强制使用单线程,请使用 single-thread 功能。

[dependencies]
tokenizer = { version = "^0.1", features = ["single-thread"] }

泰语文本分词示例

use tokenizer::{Tokenizer, th};
let tokenizer = th::Tokenizer::new("path/to/dictionary.txt").expect("Dictionary file not found");
// Assuming dictinoary contains "ภาษาไทย" and "นิดเดียว" but not "ง่าย"
assert_eq!(tokenizer.tokenize("ภาษาไทยง่ายนิดเดียว"), vec!["ภาษาไทย", "ง่าย", "นิดเดียว"]);

使用 Lexitron 字典的示例实现

我创建了一个示例代码,用于在 10 次蒙特卡洛模拟测试中计算 F1 分数,其中每个测试使用 200 个样本大小,并保留其中 10% 的样本不通过分词器来测试分词器在文本中有 10% 未知单词时的质量。

存储库 使用 NECTEC 的 Lexitron 字典。在您使用之前,您应该首先阅读他们的许可协议。

我还创建了一个蒙特卡洛模拟,它使用了整个字典,将其打乱,从中取出 90% 创建分词器,然后重新打乱并使用所有内容来计算 F1 分数。该存储库可以在 此处 找到。

依赖关系

~0–265KB