OPENNLP-830 Replace the IndexHashMap with java.util.HashMap

git-svn-id: https://svn.apache.org/repos/asf/opennlp/trunk@1745401 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/GISModelWriter.java b/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/GISModelWriter.java
index 71c2f77..d2eefe6 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/GISModelWriter.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/io/GISModelWriter.java
@@ -23,12 +23,12 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import opennlp.tools.ml.model.AbstractModel;
 import opennlp.tools.ml.model.AbstractModelWriter;
 import opennlp.tools.ml.model.ComparablePredicate;
 import opennlp.tools.ml.model.Context;
-import opennlp.tools.ml.model.IndexHashTable;
 
 /**
  * Abstract parent class for GISModel writers.  It provides the persist method
@@ -47,13 +47,13 @@
     Object[] data = model.getDataStructures();
 
     PARAMS = (Context[]) data[0];
-    IndexHashTable<String> pmap = (IndexHashTable<String>) data[1];
+    Map<String, Integer> pmap = (Map<String, Integer>) data[1];
     OUTCOME_LABELS = (String[]) data[2];
     CORRECTION_CONSTANT = (Integer) data[3];
     CORRECTION_PARAM = (Double) data[4];
 
     PRED_LABELS = new String[pmap.size()];
-    pmap.toArray(PRED_LABELS);
+    pmap.keySet().toArray(PRED_LABELS);
   }
 
 
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNModel.java b/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNModel.java
index bc7cce1..a6676d3 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNModel.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/maxent/quasinewton/QNModel.java
@@ -32,7 +32,11 @@
     return this.outcomeNames.length;

   }

 

-  private int getPredIndex(String predicate) {

+  private Integer getPredIndex(String predicate) {

+    

+    if (predicate == null) throw new RuntimeException("ASDASFAS");

+    if (pmap == null) throw new RuntimeException("ASDASFAXXXXXXXS");

+    

     return pmap.get(predicate);

   }

 

@@ -64,9 +68,9 @@
     Context[] params = evalParams.getParams();

 

     for (int ci = 0; ci < context.length; ci++) {

-      int predIdx = getPredIndex(context[ci]);

+      Integer predIdx = getPredIndex(context[ci]);

 

-      if (predIdx >= 0) {

+      if (predIdx != null) {

         double predValue = 1.0;

         if (values != null) predValue = values[ci];

 

@@ -139,7 +143,8 @@
     if (this.pmap.size() != objModel.pmap.size())

       return false;

     String[] pmapArray = new String[pmap.size()];

-    pmap.toArray(pmapArray);

+    pmap.keySet().toArray(pmapArray);

+    

     for (int i = 0; i < this.pmap.size(); i++) {

       if (i != objModel.pmap.get(pmapArray[i]))

         return false;

diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractModel.java b/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractModel.java
index 7859012..84e399a 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractModel.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/model/AbstractModel.java
@@ -20,11 +20,13 @@
 package opennlp.tools.ml.model;
 
 import java.text.DecimalFormat;
+import java.util.HashMap;
+import java.util.Map;
 
 public abstract class AbstractModel implements MaxentModel {
 
   /** Mapping between predicates/contexts and an integer representing them. */
-  protected IndexHashTable<String> pmap;
+  protected Map<String, Integer> pmap;
   /** The names of the outcomes. */
   protected String[] outcomeNames;
   /** Parameters for the model. */
@@ -37,7 +39,10 @@
   /** The type of the model. */
   protected ModelType modelType;
 
-  public AbstractModel(Context[] params, String[] predLabels, IndexHashTable<String> pmap, String[] outcomeNames) {
+  public AbstractModel(Context[] params, String[] predLabels, Map<String, Integer> pmap, String[] outcomeNames) {
+    
+    if (pmap == null) throw new RuntimeException("");
+    
     this.pmap = pmap;
     this.outcomeNames =  outcomeNames;
     this.evalParams = new EvalParameters(params,outcomeNames.length);
@@ -54,7 +59,12 @@
   }
 
   private void init(String[] predLabels, String[] outcomeNames){
-    this.pmap = new IndexHashTable<String>(predLabels, 0.7d);
+    this.pmap = new HashMap<String, Integer>(predLabels.length);
+    
+    for (int i = 0; i < predLabels.length; i++) {
+      pmap.put(predLabels[i], i);
+    }
+    
     this.outcomeNames =  outcomeNames;
   }
 
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/model/IndexHashTable.java b/opennlp-tools/src/main/java/opennlp/tools/ml/model/IndexHashTable.java
index 003909f..5849791 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/model/IndexHashTable.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/model/IndexHashTable.java
@@ -33,7 +33,10 @@
  * The table is thread safe and can concurrently accessed by multiple threads,
  * thread safety is achieved through immutability. Though its not strictly immutable
  * which means, that the table must still be safely published to other threads.
+ * 
+ * @deprecated use java.util.HashMap instead 
  */
+@Deprecated
 public class IndexHashTable<T> {
 
   private final Object keys[];
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModel.java b/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModel.java
index c5689d8..23ec75a 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModel.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModel.java
@@ -28,7 +28,6 @@
 import opennlp.tools.ml.model.AbstractModel;
 import opennlp.tools.ml.model.Context;
 import opennlp.tools.ml.model.EvalParameters;
-import opennlp.tools.ml.model.IndexHashTable;
 
 /**
  * Class implementing the multinomial Naive Bayes classifier model.
@@ -38,19 +37,8 @@
   protected double[] outcomeTotals;
   protected long vocabulary;
 
-  public NaiveBayesModel(Context[] params, String[] predLabels, IndexHashTable<String> pmap, String[] outcomeNames) {
-    super(params, predLabels, pmap, outcomeNames);
-    outcomeTotals = initOutcomeTotals(outcomeNames, params);
-    this.evalParams = new NaiveBayesEvalParameters(params, outcomeNames.length, outcomeTotals, predLabels.length);
-    modelType = ModelType.NaiveBayes;
-  }
-
-  /**
-   * @deprecated use the constructor with the {@link IndexHashTable} instead!
-   */
-  @Deprecated
   public NaiveBayesModel(Context[] params, String[] predLabels, Map<String, Integer> pmap, String[] outcomeNames) {
-    super(params, predLabels, outcomeNames);
+    super(params, predLabels, pmap, outcomeNames);
     outcomeTotals = initOutcomeTotals(outcomeNames, params);
     this.evalParams = new NaiveBayesEvalParameters(params, outcomeNames.length, outcomeTotals, predLabels.length);
     modelType = ModelType.NaiveBayes;
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModelWriter.java b/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModelWriter.java
index 5ebdbbc..f2152eb 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModelWriter.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/naivebayes/NaiveBayesModelWriter.java
@@ -23,12 +23,12 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import opennlp.tools.ml.model.AbstractModel;
 import opennlp.tools.ml.model.AbstractModelWriter;
 import opennlp.tools.ml.model.ComparablePredicate;
 import opennlp.tools.ml.model.Context;
-import opennlp.tools.ml.model.IndexHashTable;
 
 /**
  * Abstract parent class for NaiveBayes writers.  It provides the persist method
@@ -46,11 +46,11 @@
     Object[] data = model.getDataStructures();
     this.numOutcomes = model.getNumOutcomes();
     PARAMS = (Context[]) data[0];
-    IndexHashTable<String> pmap = (IndexHashTable<String>) data[1];
+    Map<String, Integer> pmap = (Map<String, Integer>) data[1];
     OUTCOME_LABELS = (String[]) data[2];
 
     PRED_LABELS = new String[pmap.size()];
-    pmap.toArray(PRED_LABELS);
+    pmap.keySet().toArray(PRED_LABELS);
   }
 
   protected ComparablePredicate[] sortValues() {
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModel.java b/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModel.java
index 40d634e..abc2859 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModel.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModel.java
@@ -28,24 +28,14 @@
 import opennlp.tools.ml.model.AbstractModel;
 import opennlp.tools.ml.model.Context;
 import opennlp.tools.ml.model.EvalParameters;
-import opennlp.tools.ml.model.IndexHashTable;
 
 public class PerceptronModel extends AbstractModel {
 
-  public PerceptronModel(Context[] params, String[] predLabels, IndexHashTable<String> pmap, String[] outcomeNames) {
+  public PerceptronModel(Context[] params, String[] predLabels, Map<String, Integer> pmap, String[] outcomeNames) {
     super(params,predLabels,pmap,outcomeNames);
     modelType = ModelType.Perceptron;
   }
 
-  /**
-   * @deprecated use the constructor with the {@link IndexHashTable} instead!
-   */
-  @Deprecated
-  public PerceptronModel(Context[] params, String[] predLabels, Map<String,Integer> pmap, String[] outcomeNames) {
-    super(params,predLabels,outcomeNames);
-    modelType = ModelType.Perceptron;
-  }
-
   public PerceptronModel(Context[] params, String[] predLabels, String[] outcomeNames) {
     super(params,predLabels,outcomeNames);
     modelType = ModelType.Perceptron;
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModelWriter.java b/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModelWriter.java
index f634060..de7d955 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModelWriter.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/PerceptronModelWriter.java
@@ -23,12 +23,12 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import opennlp.tools.ml.model.AbstractModel;
 import opennlp.tools.ml.model.AbstractModelWriter;
 import opennlp.tools.ml.model.ComparablePredicate;
 import opennlp.tools.ml.model.Context;
-import opennlp.tools.ml.model.IndexHashTable;
 
 /**
  * Abstract parent class for Perceptron writers.  It provides the persist method
@@ -47,11 +47,11 @@
       Object[] data = model.getDataStructures();
       this.numOutcomes = model.getNumOutcomes();
       PARAMS = (Context[]) data[0];
-      IndexHashTable<String> pmap = (IndexHashTable<String>) data[1];
+      Map<String, Integer> pmap = (Map<String, Integer>) data[1];
       OUTCOME_LABELS = (String[])data[2];
 
       PRED_LABELS = new String[pmap.size()];
-      pmap.toArray(PRED_LABELS);
+      pmap.keySet().toArray(PRED_LABELS);
     }
 
     protected ComparablePredicate[] sortValues () {
diff --git a/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/SimplePerceptronSequenceTrainer.java b/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/SimplePerceptronSequenceTrainer.java
index 5651a12..43537c5 100644
--- a/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/SimplePerceptronSequenceTrainer.java
+++ b/opennlp-tools/src/main/java/opennlp/tools/ml/perceptron/SimplePerceptronSequenceTrainer.java
@@ -27,7 +27,6 @@
 import opennlp.tools.ml.model.AbstractModel;
 import opennlp.tools.ml.model.DataIndexer;
 import opennlp.tools.ml.model.Event;
-import opennlp.tools.ml.model.IndexHashTable;
 import opennlp.tools.ml.model.MutableContext;
 import opennlp.tools.ml.model.OnePassDataIndexer;
 import opennlp.tools.ml.model.Sequence;
@@ -68,7 +67,7 @@
   private MutableContext[] averageParams;
 
   /** Mapping between context and an integer */
-  private IndexHashTable<String> pmap;
+  private Map<String, Integer> pmap;
 
   private Map<String,Integer> omap;
 
@@ -128,8 +127,12 @@
 
     outcomeList  = di.getOutcomeList();
     predLabels = di.getPredLabels();
-    pmap = new IndexHashTable<String>(predLabels, 0.7d);
+    pmap = new HashMap<String, Integer>();
 
+    for (int i = 0; i < predLabels.length; i++) {
+      pmap.put(predLabels[i], i);
+    }
+    
     display("Incorporating indexed data for training...  \n");
     this.useAverage = useAverage;
     numEvents = di.getNumEvents();