Wednesday, 16 July 2014

Damerau-Levenshtein Distance

Damerau-Levenshtein Distance is similar to Levenshtein distance. Originally, invented to detect short spelling mistakes in strings. Allows all the edits that are allowed in Levenshtein distance, additionally allows swapping of adjacent characters. Uses: in DNA re-sequencing, Fraud Detection.

For example

Damerau-Levenshtein (sun , sun) = 0
Damerau-Levenshtein (sun , son) = 1
Damerau-Levenshtein (sun , snu) = 1

Levenshtein (sun , sun) = 0
Levenshtein (sun , son) = 1
Levenshtein (sun , snu) = 2

The code uses Ling-Pipe library, the library has a license attached to it that can be accessed here

______________________________________________________________________________
import com.aliasi.spell.EditDistance;
import com.aliasi.util.Distance;


public class DistanceDemo {
static String str1 = "sun";
static String str2 = "son";
static String str3 = "snu";


public static void main(String[] args) {

Distance<CharSequence> damerauLevensteinWithTranspose  = new EditDistance(true);
Distance<CharSequence> damerauLevensteinWithOutTranspose  = new EditDistance(false);

double distancewt = damerauLevensteinWithTranspose.distance(str1,str1);
double distancewot = damerauLevensteinWithOutTranspose.distance(str1,str1);
System.out.println("Levenshtein distance between "+str1+" and "+str1+" : "+distancewt);
System.out.println("Damerau Levenshtein (transpose allowed) distance between "+str1+" and "+str1+" : "+distancewot);

distancewt = damerauLevensteinWithTranspose.distance(str1,str2);
distancewot = damerauLevensteinWithOutTranspose.distance(str1,str2);
System.out.println("Levenshtein distance between "+str1+" and "+str2+" : "+distancewt);
System.out.println("Damerau Levenshtein (transpose allowed) distance between "+str1+" and "+str2+" : "+distancewot);

distancewt = damerauLevensteinWithTranspose.distance(str1,str3);
distancewot = damerauLevensteinWithOutTranspose.distance(str1,str3);
System.out.println("Levenshtein distance between "+str1+" and "+str3+" : "+distancewt);
System.out.println("Damerau Levenshtein (transpose allowed) distance between "+str1+" and "+str3+" : "+distancewot);


}


}


______________________________________________________________________________

No comments:

Post a Comment