8个版本
使用旧Rust 2015
0.1.7 | 2021年12月4日 |
---|---|
0.1.6 | 2021年12月4日 |
0.1.4 | 2021年3月15日 |
948 在 文本处理
每月下载 84 次
62KB
1K SLoC
SymSpell
由brilliant的René Klačan对C#编写并由@wolfgarbe在Rust中实现的一些修改。没有更改API,用作symspellcrate的更快的直接替换。
使用方法
extern crate symspell;
use symspell::{AsciiStringStrategy, SymSpell, Verbosity};
fn main() {
let mut symspell: SymSpell<AsciiStringStrategy> = SymSpell::default();
symspell.load_dictionary("data/frequency_dictionary_en_82_765.txt", 0, 1, " ");
symspell.load_bigram_dictionary(
"./data/frequency_bigramdictionary_en_243_342.txt",
0,
2,
" "
);
let suggestions = symspell.lookup("roket", Verbosity::Top, 2);
println!("{:?}", suggestions);
let sentence = "whereis th elove hehad dated forImuch of thepast who couqdn'tread in sixtgrade and ins pired him"
let compound_suggestions = symspell.lookup_compound(sentence, 2);
println!("{:?}", compound_suggestions);
let sentence = "whereisthelove";
let segmented = symspell.word_segmentation(sentence, 2);
println!("{:?}", segmented);
}
注意。词典条目必须小写
高级使用
使用自定义设置
let mut symspell: SymSpell<AsciiStringStrategy> = SymSpellBuilder::default()
.max_dictionary_edit_distance(2)
.prefix_length(7)
.count_threshold(1)
.build()
.unwrap()
字符串策略
字符串策略是对字符串操作的抽象,例如预处理。
包含两种策略
UnicodeStringStrategy
- 不进行任何预处理,并按原样处理字符串。
AsciiStringStrategy
- 将字符串转换为仅ASCII字符。
- 当你处理带重音的语言,并且你不想关心重音等时很有用
要配置字符串策略,只需将其作为类型参数传递
let mut ascii_symspell: SymSpell<AsciiStringStrategy> = SymSpell::default();
let mut unicode_symspell: SymSpell<UnicodeStringStrategy> = SymSpell::default();
JavaScript绑定
此crate可以针对wasm32目标编译,并公开一个SymSpell类,可以从JavaScript中使用如下。仅导出UnicodeStringStrategy,这意味着如果有人想操作仅ASCII字符串,则必须在JS中预先准备字典和句子。
const fs = require('fs');
const rust = require('./pkg');
let dictionary = fs.readFileSync('data/frequency_dictionary_en_82_765.txt');
let sentence = "whereis th elove hehad dated forImuch of thepast who couqdn'tread in sixtgrade and ins pired him";
let symspell = new rust.SymSpell({ max_edit_distance: 2, prefix_length: 7, count_threshold: 1});
symspell.load_dictionary(dictionary.buffer, { term_index: 0, count_index: 1, separator: " "});
symspell.load_bigram_dictionary(bigram_dict.buffer, { term_index: 0, count_index: 2, separator: " "});
symspell.lookup_compound(sentence, 1);
可以使用wasm-pack
(例如wasm-pack build --release --target nodejs
)进行编译
依赖关系
~2–3MB
~74K SLoC