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 文本处理

Download history 260/week @ 2024-03-14 291/week @ 2024-03-21 203/week @ 2024-03-28 321/week @ 2024-04-04 151/week @ 2024-04-11 133/week @ 2024-04-18 165/week @ 2024-04-25 226/week @ 2024-05-02 357/week @ 2024-05-09 261/week @ 2024-05-16 146/week @ 2024-05-23 179/week @ 2024-05-30 165/week @ 2024-06-06 244/week @ 2024-06-13 284/week @ 2024-06-20 239/week @ 2024-06-27

978 每月下载量
json-surf 中使用

MIT 许可证

63KB
1K SLoC

Documentation

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