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