/** * Gets distance between numerial values * * @param srcField * @param srcVal * @param trgField * @param trgVal * @return */ private double getDistForNumeric(Field srcField, int srcVal, Field trgField, int trgVal) { double dist = 0; boolean linear = false; String distFun = srcField.getNumDistFunction(); if (distFun.equals("equalSoft")) { linear = true; } else if (distFun.equals("equalHard")) { dist = srcVal == trgVal ? 0 : 1; } else if (distFun.equals("minSoft")) { if (trgVal >= srcVal) { dist = 0; } else { linear = true; } } else if (distFun.equals("minHard")) { dist = trgVal >= srcVal ? 0 : 1; } else if (distFun.equals("maxSoft")) { if (trgVal <= srcVal) { dist = 0; } else { linear = true; } } else if (distFun.equals("maxHard")) { dist = trgVal <= srcVal ? 0 : 1; } if (linear) { if (trgField.getMax() > trgField.getMin()) { dist = ((double) (srcVal - trgVal)) / (trgField.getMax() - trgField.getMin()); } else { int max = srcVal > trgVal ? srcVal : trgVal; double diff = ((double) (srcVal - trgVal)) / max; if (diff < 0) { diff = -diff; } dist = diff > schema.getNumericDiffThreshold() ? 1.0 : 0.0; } if (dist < 0) { dist = -dist; } } return dist; }