diff --git a/dnet-pace-core/pom.xml b/dnet-pace-core/pom.xml
index 34138cc85..a34ed9f63 100644
--- a/dnet-pace-core/pom.xml
+++ b/dnet-pace-core/pom.xml
@@ -6,7 +6,7 @@
eu.dnetlib
dnet-dedup
- 3.0.15-SNAPSHOT
+ 4.0.0-SNAPSHOT
../pom.xml
diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java
index bd00f2fb9..d2722ac53 100644
--- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java
+++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/config/WfConfig.java
@@ -256,9 +256,8 @@ public class WfConfig implements Serializable {
return maxIterations;
}
- public WfConfig setMaxIterations(int maxIterations) {
+ public void setMaxIterations(int maxIterations) {
this.maxIterations = maxIterations;
- return this;
}
/*
diff --git a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java
index 50d3ec667..5663a79dd 100644
--- a/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java
+++ b/dnet-pace-core/src/main/java/eu/dnetlib/pace/tree/support/TreeProcessor.java
@@ -24,16 +24,16 @@ public class TreeProcessor {
public boolean compare(final MapDocument a, final MapDocument b) {
//evaluate the decision tree
- return evaluateTree(a, b, config.decisionTree()) == MatchType.MATCH;
+ return evaluateTree(a, b) == MatchType.MATCH;
}
- public MatchType evaluateTree(final MapDocument doc1, final MapDocument doc2, final Map decisionTree){
+ public MatchType evaluateTree(final MapDocument doc1, final MapDocument doc2){
String current = "start";
while (MatchType.parse(current)==MatchType.UNDEFINED) {
- TreeNodeDef currentNode = decisionTree.get(current);
+ TreeNodeDef currentNode = config.decisionTree().get(current);
//throw an exception if the node doesn't exist
if (currentNode == null)
throw new PaceException("The Tree Node doesn't exist: " + current);
@@ -57,4 +57,35 @@ public class TreeProcessor {
return MatchType.parse(current);
}
+ public double computeScore(final MapDocument doc1, final MapDocument doc2) {
+ String current = "start";
+ double score = 0.0;
+
+ while (MatchType.parse(current)==MatchType.UNDEFINED) {
+
+ TreeNodeDef currentNode = config.decisionTree().get(current);
+ //throw an exception if the node doesn't exist
+ if (currentNode == null)
+ throw new PaceException("The Tree Node doesn't exist: " + current);
+
+ TreeNodeStats stats = currentNode.evaluate(doc1, doc2, config);
+
+ score = stats.getFinalScore(currentNode.getAggregation());
+ //if ignoreUndefined=false the miss is considered as undefined
+ if (!currentNode.isIgnoreUndefined() && stats.getUndefinedCount()>0) {
+ current = currentNode.getUndefined();
+ }
+ //if ignoreUndefined=true the miss is ignored and the score computed anyway
+ else if (stats.getFinalScore(currentNode.getAggregation()) >= currentNode.getThreshold()) {
+ current = currentNode.getPositive();
+ }
+ else {
+ current = currentNode.getNegative();
+ }
+
+ }
+
+ return score;
+ }
+
}