Struct word_sensitive::trie::Trie[][src]

pub struct Trie<T> {
    pub root: Option<NonNull<Node<T>>>,
    // some fields omitted
}

Fields

root: Option<NonNull<Node<T>>>

Implementations

Add keywords from file

Examples

use word_sensitive::trie;
let mut tree = trie::Trie::default();
tree.add_key_word_from_file("key_words/keywords.txt").unwrap();
tree.build();
let matches = tree.query("回民吃猪肉".as_bytes().as_ref());
assert_eq!(matches[0], "回民".as_bytes().as_ref());
assert_eq!(matches[1], "回民吃猪肉".as_bytes().as_ref());

Add keyword

Examples

use word_sensitive::trie;
let mut tree = trie::Trie::default();
tree.add_key_word("abc".as_bytes().to_vec());
tree.add_key_word("bcd".as_bytes().to_vec());
tree.build();
let matches = tree.query("hello, abcd".as_bytes().as_ref());
assert_eq!(matches[0], "abc".as_bytes().as_ref());
assert_eq!(matches[1], "bcd".as_bytes().as_ref());

Build fail pointer for tree

Examples

use word_sensitive::trie;
let mut tree = trie::Trie::default();
tree.add_key_word("abc".as_bytes().to_vec());
tree.add_key_word("bac".as_bytes().to_vec());
tree.add_key_word("aac".as_bytes().to_vec());
tree.add_key_word("bcd".as_bytes().to_vec());
tree.build();
let matches = tree.query("abcdef".as_bytes().as_ref());
assert_eq!(matches[0], "abc".as_bytes().as_ref()) ;
assert_eq!(matches[1], "bcd".as_bytes().as_ref()) ;

Query all key_words input text string

Examples

use word_sensitive::trie;
let mut tree = trie::Trie::default();
tree.add_key_word("aaa".as_bytes().to_vec());
tree.add_key_word("aab".as_bytes().to_vec());
tree.add_key_word("aac".as_bytes().to_vec());
tree.add_key_word("aba".as_bytes().to_vec());
tree.add_key_word("abb".as_bytes().to_vec());
tree.add_key_word("abc".as_bytes().to_vec());
tree.add_key_word("aca".as_bytes().to_vec());
tree.add_key_word("acb".as_bytes().to_vec());
tree.add_key_word("acc".as_bytes().to_vec());
tree.add_key_word("baa".as_bytes().to_vec());
tree.add_key_word("bab".as_bytes().to_vec());
tree.add_key_word("bac".as_bytes().to_vec());
tree.add_key_word("bba".as_bytes().to_vec());
tree.add_key_word("bbb".as_bytes().to_vec());
tree.add_key_word("bbc".as_bytes().to_vec());
tree.add_key_word("bca".as_bytes().to_vec());
tree.add_key_word("bcb".as_bytes().to_vec());
tree.add_key_word("bcc".as_bytes().to_vec());
tree.add_key_word("caa".as_bytes().to_vec());
tree.add_key_word("cab".as_bytes().to_vec());
tree.add_key_word("cac".as_bytes().to_vec());
tree.add_key_word("cba".as_bytes().to_vec());
tree.add_key_word("cbb".as_bytes().to_vec());
tree.add_key_word("cbc".as_bytes().to_vec());
tree.add_key_word("cca".as_bytes().to_vec());
tree.add_key_word("ccb".as_bytes().to_vec());
tree.add_key_word("ccc".as_bytes().to_vec());
tree.build();
let matches = tree.query("abcabcbcca".as_bytes().as_ref());
assert_eq!(matches[0], "abc".as_bytes().as_ref());
assert_eq!(matches[1], "bca".as_bytes().as_ref());
assert_eq!(matches[2], "cab".as_bytes().as_ref());
assert_eq!(matches[3], "abc".as_bytes().as_ref());
assert_eq!(matches[4], "bcb".as_bytes().as_ref());
assert_eq!(matches[5], "cbc".as_bytes().as_ref());
assert_eq!(matches[6], "bcc".as_bytes().as_ref());
assert_eq!(matches[7], "cca".as_bytes().as_ref());

Query total weight for text

Examples


use word_sensitive::trie;
let mut tree = trie::Trie::default();
tree.add_key_word("abc".as_bytes().to_vec());
tree.add_key_word("bc".as_bytes().to_vec());
tree.build();
assert_eq!(2, tree.query_total_weight("abc".as_bytes().as_ref()));


#[derive(Clone)]
struct Ext {
cate: usize,
weight: usize,
len: usize,
}
impl trie::NodeExt for Ext {
fn get_len(&self) -> usize {
    self.len
}
fn eq(&self, other: &Self) -> bool {
    self.len == other.len
}
fn get_weight(&self) -> usize {
    self.weight
}
fn get_cate(&self) -> usize {
    self.cate
}
}
let mut tree = trie::Trie::default();
tree.add_key_word_ext(
    "abc".as_bytes().to_vec(),
    Ext {
        cate: 1,
        weight: 2,
        len: 3,
    },
);
tree.add_key_word_ext(
    "bc".as_bytes().to_vec(),
    Ext {
        cate: 1,
        weight: 1,
        len: 2,
    },
);
tree.build();
assert_eq!(3, tree.query_total_weight("abc".as_bytes().as_ref()));

Query Category weight for text

Examples

use word_sensitive::trie;
let mut tree = trie::Trie::default();
tree.add_key_word("abc".as_bytes().to_vec());
tree.add_key_word("bc".as_bytes().to_vec());
tree.build();
assert_eq!(
    Some(&2),
    tree.query_cate_weight("abc".as_bytes().as_ref()).get(&1)
);
#[derive(Clone)]
struct Ext {
cate: usize,
weight: usize,
len: usize,
}
impl trie::NodeExt for Ext {
fn get_len(&self) -> usize {
    self.len
}
fn eq(&self, other: &Self) -> bool {
    self.len == other.len
}
fn get_weight(&self) -> usize {
    self.weight
}
fn get_cate(&self) -> usize {
    self.cate
}
}
let mut tree = trie::Trie::default();
tree.add_key_word_ext(
    "abc".as_bytes().to_vec(),
    Ext {
        cate: 1,
        weight: 2,
        len: 3,
    },
);
tree.add_key_word_ext(
    "bc".as_bytes().to_vec(),
    Ext {
        cate: 1,
        weight: 1,
        len: 2,
    },
);
tree.build();
assert_eq!(
    Some(&3),
    tree.query_cate_weight("abc".as_bytes().as_ref()).get(&1)
);
tree.add_key_word_ext(
    "bc".as_bytes().to_vec(),
    Ext {
        cate: 2,
        weight: 1,
        len: 2,
    },
);
tree.build();
tree.add_key_word_ext(
    "ab".as_bytes().to_vec(),
    Ext {
        cate: 2,
        weight: 1,
        len: 2,
    },
);
tree.build();
assert_eq!(
    Some(&2),
    tree.query_cate_weight("abc".as_bytes().as_ref()).get(&1)
);
assert_eq!(
    Some(&2),
    tree.query_cate_weight("abc".as_bytes().as_ref()).get(&2)
);

Trait Implementations

Returns the “default value” for a type. Read more

Executes the destructor for this type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Performs the conversion.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.