10 unstable releases (4 breaking)

0.5.2 Aug 13, 2022
0.5.1 Aug 10, 2022
0.4.0 Jul 31, 2022
0.3.1 Jun 2, 2022
0.1.0 Jan 5, 2021

#636 in Text processing

Download history 7/week @ 2024-07-18 35/week @ 2024-07-25 17/week @ 2024-08-01 9/week @ 2024-08-08 13/week @ 2024-08-15 7/week @ 2024-08-22 69/week @ 2024-08-29 17/week @ 2024-09-05 8/week @ 2024-09-12 21/week @ 2024-09-19 67/week @ 2024-09-26 35/week @ 2024-10-03 11/week @ 2024-10-10 4/week @ 2024-10-17 7/week @ 2024-10-24 58/week @ 2024-10-31

85 downloads per month
Used in 3 crates

MIT license

3MB
74 lines

thesaurus-rs

Crates.io Crates.io API

The offline thesaurus library for Rust that can use both wordnet and moby thesauruses.

Add to Cargo.toml for wordnet:

thesaurus = "0.5"

Add to Cargo.toml for just moby (wordnet and static are on by default):

thesaurus = { version = "0.5", features = ["moby","static"], default_features = false }

Crate Feature "static"

static is a feature that is turned on by default that the thesaurus dictionary to be stored in memory during runtime. This allows calls to dict and synonyms to be 2.5-3x faster after initialization with the added downside of increased memory usage. To turn off static, use the default_features = false option.

Backend Comparison

Name Simple Example Binary Size Simple Example Binary Size (Stripped) Available Words Average Number of Synonyms Compressed Dictionary Size License
Moby 15M 11M 30159 83.287 11M US Public Domain
Wordnet 6.9M 3.4M 125701 3.394 2.9M Wordnet License

Basic Example

use std::{env, process};

fn main() {
    let args = env::args().collect::<Vec<String>>();

    let word: String = match args.get(1) {
        Some(word) => word.to_string(),
        None => {
            eprintln!("Must include a word as an argument");
            process::exit(1);
        }
    };

    let synonyms = thesaurus::synonyms(&word);
    let num_words = thesaurus::dict().len();

    cfg_if::cfg_if! {
        if #[cfg(all(feature = "moby", feature = "wordnet"))] {
            print!("both wordnet and moby have ");
        } else if #[cfg(feature = "moby")] {
            print!("moby has ");
        } else if #[cfg(feature = "wordnet")] {
            print!("wordnet has ");
        }
    }

    println!("{num_words} words indexed, and {} synonyms for \"{word}\"...", synonyms.len());
    println!("synonyms...");
    for x in &synonyms {
        println!("   {x}");
    }
}

Wordnet Output

 $ cargo r -rq --example simple -- good
wordnet has 125701 words indexed, and 107 synonyms for "good"...
synonyms...
   acceptable
   adept
   advantageous
   ample
   angelic
   angelical
   bang-up
   beatific
   beneficial
   beneficial
   best
...

Moby Output

 $ cargo r -rq --example simple --no-default-features --features=moby -- good
moby has 30195 words indexed, and 666 synonyms for "good"...
synonyms...
   able to pay
   absolutely
   acceptable
   accomplished
   according to hoyle
   ace
   actual
   adept
   adequate
   admirable
   admissible
   adroit
   advantage
   advantageous
...

Both Output

 $ cargo r -rq --example simple --features=moby,wordnet -- good
both wordnet and moby have 132592 words indexed, and 773 synonyms for "good"...
synonyms...
   able to pay
   absolutely
   acceptable
   acceptable
   accomplished
   according to hoyle
   ace
   actual
   adept
   adept
   adequate
   admirable
   admissible
   adroit
...

Dependencies