public Float calcDistance()

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;
	}