senses/
senses.rs

1extern crate wordnet;
2
3fn print_indent(indent : u32)
4{
5  for _ in 0..indent
6  {
7    print!("    ");
8  }
9}
10
11fn print_tree(indent : u32, ptr : &wordnet::PointerRef)
12{
13  if ptr.relationship != wordnet::Relationship::Hypernym
14    { return; }
15
16  let sense = ptr.read();
17  print_indent(indent);
18  println!(
19    " => {}",
20    sense.synonyms.iter().fold(
21      "".to_string(),
22      |acc,ref x|
23      {
24        let s = if acc.len()==0 { "" } else { ", " };
25        format!("{}{}{}", acc, s, x.word)
26      }
27    ),
28  );
29  for p in &sense.pointers
30  {
31    print_tree(indent+1, p);
32  }
33
34}
35
36fn main()
37{
38  let wn = wordnet::Database::open(&::std::path::Path::new("/usr/share/wordnet")).unwrap();
39
40  for argument in std::env::args().skip(1)
41  {
42    let senses = wn.senses(&argument);
43    println!("{} has {} senses:", argument, senses.len());
44    for (n, ref s) in senses.iter().enumerate()
45    {
46      println!(
47        "  {}. {} ({}): {}",
48        n,
49        s.synonyms.iter().fold(
50          "".to_string(),
51          |acc,ref x|
52          {
53            let s = if acc.len()==0 { "" } else { ", " };
54            format!("{}{}{}", acc, s, x.word)
55          }
56        ),
57        s.part_of_speech.short(),
58        s.gloss,
59      );
60      for p in &s.pointers
61      {
62        print_tree(1, p);
63      }
64    }
65  }
66
67}
68