#dictionary #mecab #utf-8 #text-parser #version #wrapper #frequency

notmecab

使用 mecab 字典进行分词的库。不是 mecab 封装。

9 个不稳定版本

0.5.1 2020 年 7 月 25 日
0.5.0 2019 年 9 月 30 日
0.4.0 2019 年 8 月 7 日
0.3.2 2019 年 7 月 3 日
0.1.1 2018 年 12 月 21 日

文本处理 类别中排名 757

Download history 4/week @ 2024-03-11 43/week @ 2024-04-01

每月下载量 62

Apache-2.0 许可

70KB
1.5K SLoC

notmecab-rs 是一个非常基础的 mecab 克隆,仅设计用于解析,而不是训练。

此库旨在作为其他工具(如频率分析器)的库使用,而不是直接由人们使用。它也仅支持 UTF-8 字典。(停止在基础设施软件中使用除 UTF-8 之外的编码。)

根据 Apache 许可证,版本 2.0 许可。

测试

获取 unidic 的 sys.dic、matrix.bin、unk.dic 和 char.bin,并将它们放入 data/ 目录下。然后从仓库根目录调用测试。假定使用 Unidic 2.3.0(口语或书面语言变体,不包括 kobun 等),否则某些测试将失败。

性能

notmecab 的性能略低于 mecab,但在许多情况下,mecab 无法找到最低成本的标记序列,因此我非常确信 mecab 在寻找最佳解析时在某些性能敏感的地方只是走捷径。

有一些难以使用的缓存功能,旨在提高性能。您可以使用 prepare_fast_matrix_cache 上传最常见的连接边类型之间的连接矩阵,这是用于像 unidic 现代版本这样的大型字典,或者您可以使用 prepare_full_matrix_cache 将整个矩阵连接缓存加载到内存中,这是用于像 ipadic 这样的小型字典。请注意,在 notmecab 中长时间泵入文本后,对于 unidic 的现代版本,prepare_full_matrix_cache 实际上比 prepare_fast_matrix_cache 慢,尽管显然对于小型字典来说,prepare_full_matrix_cache 是最佳选择。

没有关于 prepare_fast_matrix_cache 存在或行为的稳定性保证,因为它非常具有侵入性,如果我发现更好的方法来完成它所做的事情,那么我将移除它。

示例(来自测试)

// you need to acquire a mecab dictionary and place these files here manually
let sysdic = Blob::open("data/sys.dic").unwrap();
let unkdic = Blob::open("data/unk.dic").unwrap();
let matrix = Blob::open("data/matrix.bin").unwrap();
let unkdef = Blob::open("data/char.bin").unwrap();

let dict = Dict::load(sysdic, unkdic, matrix, unkdef).unwrap();

let result = parse(&dict, "これを持っていけ").unwrap();
for token in &result.0
{
    println!("{}", token.feature);
}
let split_up_string = tokenstream_to_string(&result.0, "|");
println!("{}", split_up_string);
assert_eq!(split_up_string, "これ|を|持っ|て|いけ"); // this test might fail if you're not testing with unidic (i.e. the correct parse might be different)

示例输出

代名詞,*,*,*,*,*,コレ,此れ,これ,コレ,これ,コレ,,*,*,*,*,*,*,,コレ,コレ,コレ,コレ,0,*,*,3599534815060480,13095
助詞,格助詞,*,*,*,*,,,,,,,,*,*,*,*,*,*,格助,,,,,*,"動詞%F2@0,名詞%F1,形容詞%F2@-1",*,11381878116459008,41407
動詞,一般,*,*,五段-タ行,連用形-促音便,モツ,持つ,持っ,モッ,持つ,モツ,,*,*,*,*,*,*,,モッ,モツ,モッ,モツ,1,C1,*,10391493084848772,37804
助詞,接続助詞,*,*,*,*,,,,,,,,*,*,*,*,*,*,接助,,,,,*,"動詞%F1,形容詞%F2@-1",*,6837321680953856,24874
動詞,非自立可能,*,*,五段-カ行,命令形,イク,行く,いけ,イケ,いく,イク,,*,*,*,*,*,*,,イケ,イク,イケ,イク,0,C2,*,470874478224161,1713
これ||持っ||いけ

您还可以调用 parse_to_lexertoken,它减少了字符串分配,但不会以字符串形式获得特征字符串。

注意

  • 如果禁用优化,该软件将无法使用。
  • 加载用户词典时不会执行成本重写。
  • 在某些情况下,多个解析器在最低成本上并列。在这些情况下,并未定义选择哪个解析器。
  • 在某些情况下,meCab未能找到理想的解析,但notmecab-rs却做到了。notmecab-rs永远不会产生一个总成本高于meCab给出的解析。如果它做到了,这表明存在一些潜在的错误,应该报告,请。

依赖关系

~1MB
~16K SLoC