1   /*
2    *  MutableLexicalKnowledgeBaseImpl.java
3    *
4    *  Copyright (c) 1998-2005, 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   *  Kalina Bontcheva, 28/January/2003
12   *
13   *  $Id: MutableLexicalKnowledgeBaseImpl.java,v 1.4 2005/01/11 13:51:36 ian Exp $
14  
15   */
16  
17  package gate.lexicon;
18  
19  import java.util.*;
20  
21  import gate.Resource;
22  import gate.creole.AbstractLanguageResource;
23  
24  public class MutableLexicalKnowledgeBaseImpl extends AbstractLanguageResource
25                              implements MutableLexicalKnowledgeBase {
26  
27    private String version = "1.0";
28    protected List synsets = new ArrayList();
29    protected HashMap words = new HashMap();
30    protected List posTypes = new ArrayList();
31    static final long serialVersionUID = -2543190013851016324L;
32    private Object lexId = "MIAKT Lexical KB Lexicon";
33  
34    public MutableLexicalKnowledgeBaseImpl() {
35      for (int i = 0; i < POS_TYPES.length; i++)
36        posTypes.add(POS_TYPES[i]);
37    }
38  
39    public Resource init() throws gate.creole.ResourceInstantiationException {
40      return this;
41    }
42  
43    public Iterator getSynsets() {
44      return synsets.iterator();
45    }
46  
47    public Iterator getSynsets(Object pos) {
48      if (pos == null)
49        return null;
50      List tempList = new ArrayList();
51      for (int i=0; i<synsets.size(); i++) {
52        LexKBSynset synset = (LexKBSynset) synsets.get(i);
53        if (pos.equals(synset.getPOS()))
54          tempList.add(synset);
55      }//for
56      return tempList.iterator();
57    }
58  
59    public List lookupWord(String lemma) {
60      if (lemma == null)
61        return null;
62      Word myWord = (Word) words.get(lemma);
63      if (myWord == null)
64        return null;
65      return myWord.getWordSenses();
66    }
67  
68    public List lookupWord(String lemma, Object pos) {
69      if (lemma == null || pos == null)
70        return null;
71      Word myWord = (Word) words.get(lemma);
72      if (myWord == null)
73        return null;
74      List posSenses = new ArrayList();
75      Iterator iter = myWord.getWordSenses().iterator();
76      while (iter.hasNext()) {
77        LexKBWordSense sense = (LexKBWordSense) iter.next();
78        if (sense.getPOS().equals(pos))
79          posSenses.add(sense);
80      } //while loop through senses
81      return posSenses;
82    }
83  
84    /** add a new word */
85    public MutableWord addWord(String lemma){
86      if (words.containsKey(lemma))
87        return (MutableWord) words.get(lemma);
88  
89      MutableWordImpl newWord = new MutableWordImpl(lemma);
90      words.put(lemma, newWord);
91      return newWord;
92    }
93  
94    /** sets the lexicon version */
95    public void setVersion(String newVersion){
96      version = newVersion;
97    }
98  
99    /** returns the lexicon version */
100   public String getVersion() {
101     return version;
102   }
103 
104   public MutableLexKBSynset addSynset() {
105     MutableLexKBSynset newSynset =  new MutableLexKBSynsetImpl();
106     synsets.add(newSynset);
107     return newSynset;
108   }
109 
110   public Object[] getPOSTypes() {
111     return posTypes.toArray();
112   }
113 
114   public void addPOSType(Object newPOSType) {
115     if (newPOSType == null)
116       return;
117     posTypes.add(newPOSType);
118   }
119 
120   public void removeWord(MutableWord theWord) {
121     if (theWord == null)
122       return;
123     theWord.removeSenses();
124     words.remove(theWord.getLemma());
125   }//removeWord
126 
127   public void removeSynset(MutableLexKBSynset synset) {
128     if (synset == null)
129       return;
130     List senses = synset.getWordSenses();
131     for (int i = 0; i < senses.size(); i++) {
132       LexKBWordSense sense = (LexKBWordSense) senses.get(i);
133       ((MutableWord) sense.getWord()).removeSense(sense);
134     }//for
135     synset.removeSenses();
136     synsets.remove(synset);
137   }//removeSynset
138 
139   public Object getLexiconId() {
140     return lexId;
141   }
142 
143   public void setLexiconId(Object Id) {
144     lexId = Id;
145   }
146 }