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 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}