stats/
stats.rs

1use std::env;
2use std::path::PathBuf;
3
4use anyhow::{Context, Result};
5use wordnet_db::{LoadMode, WordNet};
6use wordnet_types::Pos;
7
8fn main() -> Result<()> {
9    let dict_dir = env::args()
10        .nth(1)
11        .map(PathBuf::from)
12        .context("usage: cargo run -p wordnet-db --example stats -- <path-to-wordnet-dir>")?;
13
14    let wn = WordNet::load_with_mode(&dict_dir, LoadMode::Mmap)
15        .with_context(|| format!("loading WordNet from {}", dict_dir.display()))?;
16
17    let mut word_count = 0usize;
18    let mut pointer_count = 0usize;
19    let mut gloss_example_count = 0usize;
20    let mut verb_frame_instances = 0usize;
21
22    for syn in wn.iter_synsets() {
23        word_count += syn.words.len();
24        pointer_count += syn.pointers.len();
25        gloss_example_count += syn.gloss.examples.len();
26        if syn.id.pos == Pos::Verb {
27            verb_frame_instances += syn.frames.len();
28        }
29    }
30
31    println!("Dictionary: {}", dict_dir.display());
32    println!("Index entries: {}", wn.index_count());
33    println!("Lemma keys   : {}", wn.lemma_count());
34    println!("Synsets      : {}", wn.synset_count());
35    println!("Words in synsets: {}", word_count);
36    println!("Pointers     : {}", pointer_count);
37    println!("Gloss examples: {}", gloss_example_count);
38    println!(
39        "Verb frame templates (frames.vrb): {}",
40        wn.verb_frame_templates_count()
41    );
42    println!("Verb frame instances in synsets: {}", verb_frame_instances);
43    println!("Sense-count entries: {}", wn.sense_count_entries());
44
45    // Spot-check a couple of lemmas to confirm lookup.
46    for (pos, lemma) in [(Pos::Noun, "dog"), (Pos::Verb, "run")] {
47        println!(
48            "Lemma '{}' ({:?}) exists? {}",
49            lemma,
50            pos,
51            wn.lemma_exists(pos, lemma)
52        );
53    }
54
55    Ok(())
56}