pub struct WordNet { /* private fields */ }Expand description
In-memory view of a WordNet dictionary backed by mmap or owned buffers.
Implementations§
Source§impl WordNet
impl WordNet
Sourcepub fn load(dict_dir: impl AsRef<Path>) -> Result<Self>
pub fn load(dict_dir: impl AsRef<Path>) -> Result<Self>
Load WordNet from a directory containing data.* and index.* files.
Defaults to memory-mapping the source files. Use [load_with_mode] to
force owned buffers instead.
Sourcepub fn load_with_mode(
dict_dir: impl AsRef<Path>,
mode: LoadMode,
) -> Result<Self>
pub fn load_with_mode( dict_dir: impl AsRef<Path>, mode: LoadMode, ) -> Result<Self>
Load WordNet choosing between mmap and owned buffers at runtime.
Examples found in repository?
examples/stats.rs (line 14)
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}Sourcepub fn lemma_exists(&self, pos: Pos, lemma: &str) -> bool
pub fn lemma_exists(&self, pos: Pos, lemma: &str) -> bool
Check whether a lemma exists for the given POS according to index files.
Examples found in repository?
examples/stats.rs (line 51)
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}Sourcepub fn index_entry(&self, pos: Pos, lemma: &str) -> Option<IndexEntry<'_>>
pub fn index_entry(&self, pos: Pos, lemma: &str) -> Option<IndexEntry<'_>>
Fetch a raw IndexEntry if present.
Sourcepub fn synsets_for_lemma(&self, pos: Pos, lemma: &str) -> &[SynsetId]
pub fn synsets_for_lemma(&self, pos: Pos, lemma: &str) -> &[SynsetId]
Return the synsets associated with a lemma, or an empty slice.
Sourcepub fn get_synset(&self, id: SynsetId) -> Option<Synset<'_>>
pub fn get_synset(&self, id: SynsetId) -> Option<Synset<'_>>
Fetch a Synset by id if loaded.
Sourcepub fn iter_synsets(&self) -> impl Iterator<Item = Synset<'_>> + '_
pub fn iter_synsets(&self) -> impl Iterator<Item = Synset<'_>> + '_
Iterate over all synsets as borrowed views.
Examples found in repository?
examples/stats.rs (line 22)
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}Sourcepub fn index_count(&self) -> usize
pub fn index_count(&self) -> usize
Number of index entries.
Examples found in repository?
examples/stats.rs (line 32)
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}Sourcepub fn lemma_count(&self) -> usize
pub fn lemma_count(&self) -> usize
Number of lemmas tracked across all parts of speech.
Examples found in repository?
examples/stats.rs (line 33)
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}Sourcepub fn synset_count(&self) -> usize
pub fn synset_count(&self) -> usize
Number of synsets.
Examples found in repository?
examples/stats.rs (line 34)
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}Sourcepub fn verb_frame_templates_count(&self) -> usize
pub fn verb_frame_templates_count(&self) -> usize
Number of verb frame template strings loaded.
Examples found in repository?
examples/stats.rs (line 40)
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}Sourcepub fn sense_count_entries(&self) -> usize
pub fn sense_count_entries(&self) -> usize
Number of sense-count entries parsed from cntlist.
Examples found in repository?
examples/stats.rs (line 43)
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}Auto Trait Implementations§
impl Freeze for WordNet
impl RefUnwindSafe for WordNet
impl Send for WordNet
impl Sync for WordNet
impl Unpin for WordNet
impl UnwindSafe for WordNet
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more