8个版本

使用旧Rust 2015

0.1.7 2021年12月4日
0.1.6 2021年12月4日
0.1.4 2021年3月15日

948文本处理

Download history 14/week @ 2024-03-09 25/week @ 2024-03-16 2/week @ 2024-03-23 38/week @ 2024-03-30 10/week @ 2024-04-06 4/week @ 2024-05-04 2/week @ 2024-05-18 59/week @ 2024-05-25 7/week @ 2024-06-01 51/week @ 2024-06-08 4/week @ 2024-06-15

每月下载 84

MIT 许可证

62KB
1K SLoC

Documentation

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