1 package jp.sourceforge.stigmata.birthmarks.comparators;
7 import jp.sourceforge.stigmata.Birthmark;
8 import jp.sourceforge.stigmata.BirthmarkElement;
9 import jp.sourceforge.stigmata.spi.BirthmarkSpi;
12 * calculate similarities between two birthmarks by edit distance
13 * algorithm (levenshtein distance).
15 * @author Haruaki TAMADA
18 public class ExtendedEditDistanceBirthmarkComparator extends EditDistanceBirthmarkComparator{
19 public ExtendedEditDistanceBirthmarkComparator(BirthmarkSpi spi){
23 public double compare(Birthmark b1, Birthmark b2) {
24 if(!b1.getType().equals(b2.getType())){
28 BirthmarkElement[] element1 = b1.getElements();
29 BirthmarkElement[] element2 = b2.getElements();
30 int[][] distance = createDistanceMatrics(element1, element2);
32 int length = element1.length;
33 if(length > element2.length){
34 length = element2.length;
36 int d = distance[element1.length][element2.length];
38 return (double)(1 - (d + Math.abs(element1.length - element2.length))) / length;