11个版本
使用旧的Rust 2015
0.4.3 | 2022年2月7日 |
---|---|
0.4.1 | 2020年4月16日 |
0.4.0 | 2020年2月3日 |
0.3.0 | 2019年12月20日 |
0.1.1 | 2018年4月14日 |
#447 in 文本处理
978 每月下载量
在 json-surf 中使用
63KB
1K SLoC
SymSpell
SymSpell是使用Rust编写的,最初用C#编写的出色SymSpell的实现。
用法
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目标编译,并公开一个可以像下面一样从JavaScript中使用的SymSpell类。仅导出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
)进行编译。
依赖项
~1.8–2.8MB
~68K SLoC