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();