in opennlp-similarity/src/main/java/opennlp/tools/jsmlearning/FeatureSpaceCoverageProcessor.java [79:124]
public Float calcDistance(String[][] seed, String[] candidate) throws Exception {
if (paramMap.isEmpty())
throw new Exception("paramMap.isEmpty()");
float score, catScore = 10000f, currCatScore=10000000f;
int p1 = paramMap.get("First Level Category");
int p2 = paramMap.get("Second Level Category");
for(int v=0; v<seed[0].length; v++){
if (seed[p1][v].equals(candidate[p1])) {
if (seed[p2][v].equals(candidate[p2]))
currCatScore = 0.0000001f;
else
currCatScore = 0.01f;
}
if ( catScore > currCatScore) // if found closer, update
catScore = currCatScore;
}
score = catScore;
if (score > 1000000f)
return 10000000f;
float latLongScore = 100000f, currLatLongScore = 10000000f;
for(int v=0; v<seed[0].length; v++){
try {
int p3 = paramMap.get("Latitude");
int p4 = paramMap.get("Longitude");
if (seed[p3][v].equals("") || seed[p4][v].equals("")
|| candidate[p3].equals("") || candidate[p4].equals(""))
continue;
double latDiff = Math.abs(Double.parseDouble(seed[p3][v]) - Double.parseDouble(candidate[p3]));
double longDiff = Math.abs(Double.parseDouble(seed[p4][v]) - Double.parseDouble(candidate[p4]));
if (!(latDiff>1 || longDiff>1))
currLatLongScore = (float) latDiff /100.0f + (float) longDiff /100.0f;
} catch (Exception e) {
//return 1000000f;
}
if (latLongScore > currLatLongScore)
latLongScore = currLatLongScore;
}
if (latLongScore> 10000)
return 10000f;
score+=latLongScore;
return score;
}