1   /*
2    *  WordNetViewer.java
3    *
4    *  Copyright (c) 1998-2001, The University of Sheffield.
5    *
6    *  This file is part of GATE (see http://gate.ac.uk/), and is free
7    *  software, licenced under the GNU Library General Public License,
8    *  Version 2, June 1991 (in the distribution as file licence.html,
9    *  and also available at http://gate.ac.uk/gate/licence.html).
10   *
11   *  Rosen Marinov, 29/05/2002
12   *
13   */
14  package gate.gui.wordnet;
15  
16  import gate.*;
17  import gate.creole.*;
18  import gate.wordnet.*;
19  
20  import java.awt.*;
21  import javax.swing.*;
22  import java.awt.event.*;
23  import java.util.*;
24  import java.io.*;
25  import java.net.*;
26  
27  public class WordNetViewer extends AbstractVisualResource
28                             implements ActionListener{
29  
30    protected JLabel searchLabel = new JLabel();
31    protected JTextField searchWordTextField = new JTextField();
32    protected JButton searchButton = new JButton();
33    protected JTextPane resultPane = new JTextPane();
34    protected JLabel searchLabel2 = new JLabel();
35    protected JButton nounButton = new JButton();
36    protected JButton verbButton = new JButton();
37    protected JButton adjectiveButton = new JButton();
38    protected JButton adverbButton = new JButton();
39    protected JScrollPane scrollPane = new JScrollPane();
40    protected GridBagLayout gridBagLayout1 = new GridBagLayout();
41  
42    protected JPopupMenu nounPopup;
43    protected JPopupMenu verbPopup;
44    protected JPopupMenu adjectivePopup;
45    protected JPopupMenu adverbPopup;
46  
47    private static final String propertiesFile = "file://D:/Gate/temp/file_properties.xml";
48    private WordNet wnMain = null;
49  
50    private boolean senatnceFrames = false;
51    public final static int SENTANCE_FAMES = 33001;
52  
53    public WordNetViewer(){
54      jbInit();
55      //initResources();
56    }
57  
58    private void initResources(){
59      try {
60        Gate.init();
61        wnMain = new IndexFileWordNetImpl();
62        wnMain.setPropertyUrl(new URL(propertiesFile));
63        wnMain.init();
64      } catch (Exception e){
65        e.printStackTrace();
66      }
67    }
68  
69    void jbInit(){
70      searchLabel.setText("Search Word:");
71          this.setLayout(gridBagLayout1);
72          searchButton.setText("Search");
73          searchButton.addActionListener(new java.awt.event.ActionListener() {
74              public void actionPerformed(ActionEvent e) {
75                  searchButton_actionPerformed(e);
76              }
77          });
78          searchWordTextField.addActionListener(new java.awt.event.ActionListener() {
79              public void actionPerformed(ActionEvent e) {
80                  searchWordTextField_actionPerformed(e);
81              }
82          });
83          searchLabel2.setText("Searches for ... :");
84          nounButton.setText("Noun");
85          verbButton.setText("Verb");
86          adjectiveButton.setText("Adjective");
87          adverbButton.setText("Adverb");
88  
89          nounButton.addActionListener(new java.awt.event.ActionListener() {
90              public void actionPerformed(ActionEvent e) {
91                  nounButton_actionPerformed(e);
92              }
93          });
94          verbButton.addActionListener(new java.awt.event.ActionListener() {
95              public void actionPerformed(ActionEvent e) {
96                  verbButton_actionPerformed(e);
97              }
98          });
99          adjectiveButton.addActionListener(new java.awt.event.ActionListener() {
100             public void actionPerformed(ActionEvent e) {
101                 adjectiveButton_actionPerformed(e);
102             }
103         });
104         adverbButton.addActionListener(new java.awt.event.ActionListener() {
105             public void actionPerformed(ActionEvent e) {
106                 adverbButton_actionPerformed(e);
107             }
108         });
109         nounButton.setEnabled(false);
110         verbButton.setEnabled(false);
111         adjectiveButton.setEnabled(false);
112         adverbButton.setEnabled(false);
113 
114         resultPane.setEditable(false);
115         scrollPane.getViewport().add(resultPane);
116 
117         this.add(searchLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0
118             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
119         this.add(searchWordTextField, new GridBagConstraints(1, 0, 5, 1, 1.0, 0.0
120             ,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5, 5, 5, 5), 0, 0));
121         this.add(scrollPane, new GridBagConstraints(0, 2, 7, 1, 1.0, 1.0
122             ,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(5, 5, 5, 5), 0, 0));
123         this.add(searchLabel2, new GridBagConstraints(0, 1, 2, 1, 0.0, 0.0
124             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
125         this.add(searchButton, new GridBagConstraints(6, 0, 1, 1, 0.0, 0.0
126             ,GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
127         this.add(adjectiveButton, new GridBagConstraints(4, 1, 1, 1, 0.0, 0.0
128             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
129         this.add(verbButton, new GridBagConstraints(3, 1, 1, 1, 0.0, 0.0
130             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
131         this.add(nounButton, new GridBagConstraints(2, 1, 1, 1, 0.0, 0.0
132             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
133         this.add(adverbButton, new GridBagConstraints(5, 1, 1, 1, 0.0, 0.0
134             ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5, 5, 5, 5), 0, 0));
135   }
136 
137   private void searchButton_actionPerformed(ActionEvent e) {
138     actionSearch();
139   }
140 
141   private void searchWordTextField_actionPerformed(ActionEvent e) {
142     actionSearch();
143   }
144 
145   private void actionSearch(){
146     String text = searchWordTextField.getText().trim();
147     text = text.replace(' ','_');
148     searchLabel2.setText("Searches for " + text + ":");
149 
150     nounButton.setEnabled(false);
151     verbButton.setEnabled(false);
152     adjectiveButton.setEnabled(false);
153     adverbButton.setEnabled(false);
154 
155     nounPopup = new JPopupMenu();
156     verbPopup = new JPopupMenu();
157     adjectivePopup = new JPopupMenu();
158     adverbPopup = new JPopupMenu();
159 
160     StringBuffer display = new StringBuffer("");
161 
162     addToResult(display, text, WordNet.POS_NOUN);
163     addToResult(display, text, WordNet.POS_VERB);
164     addToResult(display, text, WordNet.POS_ADJECTIVE);
165     addToResult(display, text, WordNet.POS_ADVERB);
166 
167     resultPane.setText(display.toString());
168 
169   }
170 
171   private void addToResult(StringBuffer display,  String text, int wordType) {
172     java.util.List senses = null;
173     try {
174       wnMain.cleanup();
175       senses = wnMain.lookupWord(text, wordType);
176     } catch (WordNetException wne) {
177       wne.printStackTrace();
178     }
179 
180     if ( senses!=null && senses.size()>0){
181 
182       String wordIdentifier = "";
183       switch (wordType){
184         case WordNet.POS_NOUN:
185           wordIdentifier = "noun";
186           nounButton.setEnabled(true);
187           break;
188         case WordNet.POS_VERB:
189           wordIdentifier = "verb";
190           verbButton.setEnabled(true);
191           break;
192         case WordNet.POS_ADJECTIVE:
193           wordIdentifier = "adjective";
194           adjectiveButton.setEnabled(true);
195           break;
196         case WordNet.POS_ADVERB:
197           wordIdentifier = "adverb";
198           adverbButton.setEnabled(true);
199           break;
200       }
201 
202       display.append("\n");
203       display.append("The ");
204       display.append(wordIdentifier);
205       display.append(" ");
206       display.append(text);
207       display.append(" has ");
208       display.append(senses.size());
209       display.append(" senses:");
210       display.append("\n\n");
211       for (int i=0; i< senses.size(); i++) {
212         WordSense currSense = (WordSense) senses.get(i);
213         Synset currSynset = currSense.getSynset();
214         addToPopupMenu(currSense, currSynset, wordType, senses);
215         java.util.List words = currSynset.getWordSenses();
216         String wordsString = getWords(words);
217 
218         display.append(" " + (i+1) + ". " + wordsString + " -- " + currSynset.getGloss());
219         display.append("\n");
220       }
221     }
222   }
223 
224   private void addToPopupMenu(WordSense wordSense, Synset synset, int wordType, java.util.List senses){
225     java.util.List semRelations = null;
226     try {
227       semRelations = synset.getSemanticRelations();
228     } catch (Exception e){
229       e.printStackTrace();
230     }
231 
232     java.util.List lexRelations = null;
233     try {
234       lexRelations = wordSense.getLexicalRelations();
235     } catch (Exception e){
236       e.printStackTrace();
237     }
238 
239     for (int i=0; i<(semRelations.size()+lexRelations.size()); i++) {
240       Relation relation;
241       if (i<semRelations.size()){
242         relation = (SemanticRelation) semRelations.get(i);
243       } else {
244         relation = (LexicalRelation) lexRelations.get(i-semRelations.size());
245       }
246 
247       switch (wordType) {
248         case WordNet.POS_NOUN:
249           if (false == existInPopup(nounPopup, getLabel(relation)) ){
250             nounPopup.add(new RelationItem(getLabel(relation), relation.getType(), senses));
251           }
252           break;
253         case WordNet.POS_VERB:
254           //commented because problem with WN API and Sentance Frames
255           if (!senatnceFrames){
256             verbPopup.add(new RelationItem("Senatnce Frames", SENTANCE_FAMES, senses));
257             senatnceFrames = true;
258           }
259           if (false == existInPopup(verbPopup, getLabel(relation)) ){
260             verbPopup.add(new RelationItem(getLabel(relation), relation.getType(), senses));
261           }
262           break;
263         case WordNet.POS_ADJECTIVE:
264           if (false == existInPopup(adjectivePopup, getLabel(relation)) ){
265             adjectivePopup.add(new RelationItem(getLabel(relation), relation.getType(), senses));
266           }
267           break;
268         case WordNet.POS_ADVERB:
269           if (false == existInPopup(adverbPopup, getLabel(relation)) ){
270             adverbPopup.add(new RelationItem(getLabel(relation), relation.getType(), senses));
271           }
272           break;
273       }
274     }
275   }
276 
277   private boolean existInPopup(JPopupMenu menu, String name){
278     boolean result = false;
279     for (int i=0; i<menu.getComponents().length; i++){
280       if ( menu.getComponents()[i].getName().equals(name)){
281         result = true;
282         break;
283       }
284     }
285     return result;
286   }
287 
288   void nounButton_actionPerformed(ActionEvent e) {
289     nounPopup.show(nounButton, 0, nounButton.getHeight());
290   }
291 
292   void verbButton_actionPerformed(ActionEvent e) {
293     verbPopup.show(verbButton, 0, verbButton.getHeight());
294   }
295 
296   void adjectiveButton_actionPerformed(ActionEvent e) {
297     adjectivePopup.show(adjectiveButton, 0, adjectiveButton.getHeight());
298   }
299 
300   void adverbButton_actionPerformed(ActionEvent e) {
301     if (adverbPopup.getComponentCount()>0){
302       adverbPopup.show(adverbButton, 0, adverbButton.getHeight());
303     }
304   }
305 
306   public void actionPerformed(ActionEvent e){
307     RelationItem ri = (RelationItem) e.getSource();
308     switch (ri.getRelationType()){
309       case Relation.REL_ANTONYM:
310         relAntonymSeeAlso(ri.getSenses(), Relation.REL_ANTONYM,"=> ");
311         break;
312       case Relation.REL_ATTRIBUTE:
313         relAtributeSimilarTo(ri.getSenses(), Relation.REL_ATTRIBUTE, "=> ");
314         break;
315       case Relation.REL_CAUSE:
316         relHoloMeroHypo(ri.getSenses(), Relation.REL_CAUSE, "=> ");
317         break;
318       case Relation.REL_DERIVED_FROM_ADJECTIVE:
319         relAntonymSeeAlso(ri.getSenses(), Relation.REL_DERIVED_FROM_ADJECTIVE,"=> ");
320         break;
321       case Relation.REL_ENTAILMENT:
322         relHoloMeroHypo(ri.getSenses(), Relation.REL_ENTAILMENT, "=> ");
323         break;
324       case Relation.REL_HYPERNYM:
325         relHypernym(ri.getSenses());
326         break;
327       case Relation.REL_HYPONYM:
328         relHoloMeroHypo(ri.getSenses(), Relation.REL_HYPONYM, "=> ");
329         break;
330       case Relation.REL_MEMBER_HOLONYM:
331         relHoloMeroHypo(ri.getSenses(), Relation.REL_MEMBER_HOLONYM,"MEMBER OF: ");
332         break;
333       case Relation.REL_MEMBER_MERONYM:
334         relHoloMeroHypo(ri.getSenses(), Relation.REL_MEMBER_MERONYM, "HAS MEMBER: ");
335         break;
336       case Relation.REL_PARTICIPLE_OF_VERB:
337         relAntonymSeeAlso(ri.getSenses(), Relation.REL_PARTICIPLE_OF_VERB,"=> ");
338         break;
339       case Relation.REL_PART_HOLONYM:
340         relHoloMeroHypo(ri.getSenses(), Relation.REL_PART_HOLONYM, "PART OF: ");
341         break;
342       case Relation.REL_PART_MERONYM:
343         relHoloMeroHypo(ri.getSenses(), Relation.REL_PART_MERONYM, "HAS PART: ");
344         break;
345       case Relation.REL_PERTAINYM:
346         break;
347       case Relation.REL_SEE_ALSO:
348         relAntonymSeeAlso(ri.getSenses(), Relation.REL_SEE_ALSO,"=> ");
349         break;
350       case Relation.REL_SIMILAR_TO:
351         relAtributeSimilarTo(ri.getSenses(), Relation.REL_SIMILAR_TO, "=> ");
352         break;
353       case Relation.REL_SUBSTANCE_HOLONYM:
354         relHoloMeroHypo(ri.getSenses(), Relation.REL_SUBSTANCE_HOLONYM,
355                              " SUBSTANCE OF: ");
356         break;
357       case Relation.REL_SUBSTANCE_MERONYM:
358         relHoloMeroHypo(ri.getSenses(), Relation.REL_SUBSTANCE_MERONYM, "HAS SUBSTANCE: ");
359         break;
360       case Relation.REL_VERB_GROUP:
361         relAtributeSimilarTo(ri.getSenses(), Relation.REL_VERB_GROUP, "=> ");
362         break;
363       case SENTANCE_FAMES:
364         sentanceFrames(ri.getSenses());
365         break;
366     }
367   }
368 
369   private void relHypernym(java.util.List senses){
370     StringBuffer display = new StringBuffer("");
371     for (int i = 0; i<senses.size(); i++){
372       //display.append(getDescription(Relation.REL_HYPERNYM));
373       display.append("\n");
374       display.append("Sense ");
375       display.append(i+1);
376       display.append("\n");
377 
378       WordSense currSense = (WordSense) senses.get(i);
379       Synset currSynset = currSense.getSynset();
380       recursiveHypernym(currSynset, display, "  =>");
381     }
382 
383     resultPane.setText(display.toString());
384   }
385 
386   private void recursiveHypernym(Synset synset, StringBuffer display, String prefix){
387     java.util.List words = synset.getWordSenses();
388     String wordsString = getWords(words);
389 
390     display.append(prefix);
391     display.append(" ");
392     display.append(wordsString);
393     display.append(" -- ");
394     display.append(synset.getGloss());
395     display.append("\n");
396 
397     java.util.List  hList = null;
398     try {
399       hList = synset.getSemanticRelations(Relation.REL_HYPERNYM);
400     } catch (Exception e){
401       e.printStackTrace();
402     }
403     if (hList!=null && hList.size()>0){
404       SemanticRelation rel = (SemanticRelation) hList.get(0);
405       prefix = "    " + prefix;
406       recursiveHypernym(rel.getTarget(), display, prefix);
407     }
408   }
409 
410 
411   private void relHoloMeroHypo(java.util.List senses, int relationType,
412                                String relRefString){
413     StringBuffer display = new StringBuffer("");
414     for (int i = 0; i<senses.size(); i++){
415       WordSense currSense = (WordSense) senses.get(i);
416       Synset currSynset = currSense.getSynset();
417       try {
418         if (currSynset.getSemanticRelations(relationType).size()>0){
419           //display.append(getDescription(relationType));
420           display.append("\n");
421           display.append("Sense ");
422           display.append(i+1);
423           display.append("\n");
424           recursiveHoloMeroHypo(currSynset, display, "  ", false,
425                                 relationType, relRefString);
426         }
427       } catch (Exception e){
428         e.printStackTrace();
429       }
430     }
431 
432     resultPane.setText(display.toString());
433   }
434 
435   private void recursiveHoloMeroHypo(Synset synset, StringBuffer display,
436                                 String prefix, boolean symbPrefix,
437                                 int relationType, String relRefString){
438 
439     java.util.List words = synset.getWordSenses();
440     String wordsString = getWords(words);
441 
442     display.append(prefix);
443     if (symbPrefix) {
444       display.append(relRefString);
445     }
446     display.append(wordsString);
447     display.append(" -- ");
448     display.append(synset.getGloss());
449     display.append("\n");
450 
451     java.util.List  holoList = null;
452     try {
453       holoList = synset.getSemanticRelations(relationType);
454     } catch (Exception e){
455       e.printStackTrace();
456     }
457     if (holoList!=null && holoList.size()>0){
458       for (int i = 0; i<holoList.size(); i++){
459         SemanticRelation rel = (SemanticRelation) holoList.get(i);
460         prefix = "    " + prefix;
461         recursiveHoloMeroHypo(rel.getTarget(), display, prefix, true,
462                               relationType, relRefString);
463         prefix = prefix.substring(4, prefix.length());
464       }
465     }
466   }
467 
468   private void relAntonymSeeAlso(java.util.List senses,
469                                  int relType, String relRefString){
470     StringBuffer display = new StringBuffer("");
471     boolean semantic_see_also = true;
472     for (int i = 0; i<senses.size(); i++){
473       WordSense currSense = (WordSense) senses.get(i);
474       Synset currSynset = currSense.getSynset();
475       try {
476         java.util.List antonyms = currSense.getLexicalRelations(relType);
477         if (antonyms!=null && antonyms.size()>0){
478           semantic_see_also = false;
479           //display.append(getDescription(relType));
480           display.append("\n");
481           display.append("Sense ");
482           display.append(i+1);
483           display.append("\n  ");
484           display.append(getWords(currSynset.getWordSenses()));
485           display.append(" -- ");
486           display.append(currSynset.getGloss());
487           display.append("\n");
488           for (int j=0; j<antonyms.size(); j++){
489             LexicalRelation rel = (LexicalRelation) antonyms.get(j);
490             WordSense word = rel.getTarget();
491             display.append("      ");
492             display.append(relRefString);
493             display.append(word.getWord().getLemma());
494             display.append(" -- ");
495             display.append(word.getSynset().getGloss());
496             display.append("\n");
497           }
498           display.append("\n");
499         }
500       } catch (Exception e){
501         e.printStackTrace();
502       }
503     }
504 
505     resultPane.setText(display.toString());
506     if (semantic_see_also){
507         relAtributeSimilarTo(senses, Relation.REL_SEE_ALSO,"=> ");
508     }
509   }
510 
511   private void relAtributeSimilarTo(java.util.List senses, int releationType,
512                                      String relRefString){
513     StringBuffer display = new StringBuffer("");
514     for (int i = 0; i<senses.size(); i++){
515       WordSense currSense = (WordSense) senses.get(i);
516       Synset currSynset = currSense.getSynset();
517       try {
518         java.util.List atributes = currSynset.getSemanticRelations(releationType);
519         if (atributes!=null && atributes.size()>0){
520           //display.append(getDescription(releationType));
521           display.append("\n");
522           display.append("Sense ");
523           display.append(i+1);
524           display.append("\n  ");
525           display.append(getWords(currSynset.getWordSenses()));
526           display.append(" -- ");
527           display.append(currSynset.getGloss());
528           display.append("\n");
529           for (int j=0; j<atributes.size(); j++){
530             SemanticRelation rel = (SemanticRelation) atributes.get(j);
531             Synset synset = rel.getTarget();
532             display.append("     ");
533             display.append(relRefString);
534             display.append(getWords(synset.getWordSenses()));
535 
536             display.append(" -- ");
537             display.append(synset.getGloss());
538             display.append("\n");
539           }
540           display.append("\n");
541         }
542       } catch (Exception e){
543         e.printStackTrace();
544       }
545     }
546 
547     resultPane.setText(display.toString());
548   }
549 
550 
551   private String getWords(java.util.List words){
552     StringBuffer wordsString = new StringBuffer("");
553     for (int j = 0; j<words.size(); j++){
554       WordSense word = (WordSense) words.get(j);
555       wordsString.append(word.getWord().getLemma().replace('_',' '));
556       if (j<(words.size()-1)){
557         wordsString.append(", ");
558       }
559     }
560     return wordsString.toString();
561   }
562 
563   private void sentanceFrames(java.util.List senses){
564     StringBuffer display = new StringBuffer("");
565     for (int i=0; i<senses.size(); i++) {
566       WordSense currSense = (WordSense) senses.get(i);
567       Synset currSynset = currSense.getSynset();
568       Verb currVerb = (Verb) currSense;
569       java.util.List frames = currVerb.getVerbFrames();
570 
571       display.append("\nSense ");
572       display.append(i+1);
573       display.append("\n  ");
574       display.append(getWords(currSynset.getWordSenses()));
575       display.append(" -- ");
576       display.append(currSynset.getGloss());
577       display.append("\n");
578 
579         for (int j=0; j<frames.size(); j++){
580           display.append("        *> ");
581           display.append(((VerbFrame) frames.get(j)).getFrame());
582           display.append("\n");
583         }
584     }
585     resultPane.setText(display.toString());
586   }
587 
588 
589   public String getLabel(Relation r){
590 
591     String result = "";
592     switch (r.getType()){
593       case Relation.REL_ANTONYM:
594         result = "Antonym";
595         break;
596       case Relation.REL_ATTRIBUTE:
597         result = "Attribute";
598         break;
599       case Relation.REL_CAUSE:
600         result = "Cause";
601         break;
602       case Relation.REL_DERIVED_FROM_ADJECTIVE:
603         result = "Derived From Adjective";
604         break;
605       case Relation.REL_ENTAILMENT:
606         result = "Entailment";
607         break;
608       case Relation.REL_HYPERNYM:
609         result = "Hypernym";
610         break;
611       case Relation.REL_HYPONYM:
612         result = "Hyponym";
613         break;
614       case Relation.REL_MEMBER_HOLONYM:
615         result = "Member Holonym";
616         break;
617       case Relation.REL_MEMBER_MERONYM:
618         result = "Member Meronym";
619         break;
620       case Relation.REL_PARTICIPLE_OF_VERB:
621         result = "Participle Of Verb";
622         break;
623       case Relation.REL_PART_HOLONYM:
624         result = "Holonym";
625         break;
626       case Relation.REL_PART_MERONYM:
627         result = "Meronym";
628         break;
629       case Relation.REL_PERTAINYM:
630         result = "Pertainym";
631         break;
632       case Relation.REL_SEE_ALSO:
633         result = "See Also";
634         break;
635       case Relation.REL_SIMILAR_TO:
636         result = "Similar To";
637         break;
638       case Relation.REL_SUBSTANCE_HOLONYM:
639         result = "Substance Holonym";
640         break;
641       case Relation.REL_SUBSTANCE_MERONYM:
642         result = "Substance Meronym";
643         break;
644       case Relation.REL_VERB_GROUP:
645         result = "Verb Group";
646         break;
647     }
648     return result;
649   }
650 
651   public String getDescription(int rel){
652 
653     String result = "";
654     switch (rel){
655       case Relation.REL_ANTONYM:
656         result = "Antonyms:";
657         break;
658       case Relation.REL_ATTRIBUTE:
659         result = "Attributes:";
660         break;
661       case Relation.REL_CAUSE:
662         result = "Cause:";
663         break;
664       case Relation.REL_DERIVED_FROM_ADJECTIVE:
665         result = "Derived From Adjective:";
666         break;
667       case Relation.REL_ENTAILMENT:
668         result = "Entailments:";
669         break;
670       case Relation.REL_HYPERNYM:
671         result = "Hypernyms:";
672         break;
673       case Relation.REL_HYPONYM:
674         result = "Hyponyms:";
675         break;
676       case Relation.REL_MEMBER_HOLONYM:
677         result = "Member Holonyms:";
678         break;
679       case Relation.REL_MEMBER_MERONYM:
680         result = "Member Meronyms:";
681         break;
682       case Relation.REL_PARTICIPLE_OF_VERB:
683         result = "Participle Of Verb:";
684         break;
685       case Relation.REL_PART_HOLONYM:
686         result = "Holonyms:";
687         break;
688       case Relation.REL_PART_MERONYM:
689         result = "Meronyms:";
690         break;
691       case Relation.REL_PERTAINYM:
692         result = "Pertainyms:";
693         break;
694       case Relation.REL_SEE_ALSO:
695         result = "See Also:";
696         break;
697       case Relation.REL_SIMILAR_TO:
698         result = "Similar To:";
699         break;
700       case Relation.REL_SUBSTANCE_HOLONYM:
701         result = "Substance Holonyms:";
702         break;
703       case Relation.REL_SUBSTANCE_MERONYM:
704         result = "Substance Meronyms:";
705         break;
706       case Relation.REL_VERB_GROUP:
707         result = "Verb Group:";
708         break;
709     }
710     return result;
711   }
712 
713 
714   /**
715    * Called by the GUI when this viewer/editor has to initialise itself for a
716    * specific object.
717    * @param target the object (be it a {@link gate.Resource},
718    * {@link gate.DataStore} or whatever) this viewer has to display
719    */
720   public void setTarget(Object target){
721 
722     if (false == target instanceof WordNet) {
723       throw new IllegalArgumentException();
724     }
725 
726     this.wnMain = (WordNet)target;
727   }
728 
729   private class RelationItem extends JMenuItem{
730 
731     int relType;
732     java.util.List senses;
733 
734     public RelationItem(String name, int type, java.util.List sen) {
735       super(name);
736       this.addActionListener(WordNetViewer.this);
737       relType = type;
738       senses = sen;
739       setName(name);
740     }
741 
742     public int getRelationType() {
743       return relType;
744     }
745 
746     public java.util.List getSenses(){
747       return senses;
748     }
749 
750   }
751 
752 }