From 6126ba35bbd5271b90e08947d06880993f0e7cf8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr> Date: Mon, 30 Aug 2010 13:08:20 +0000 Subject: [PATCH] - better documented the Hungarian alorithm guard --- .../exmo/align/impl/DistanceAlignment.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java b/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java index 4251e75a..99864d18 100644 --- a/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java +++ b/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java @@ -238,6 +238,7 @@ public abstract class DistanceAlignment extends ObjectAlignment implements Align for ( Object ob : ontology2().getClasses() ) { class2[j++] = ob; } + // ival indicates if all cells have the same value, or different (-1) double ival = sim.getClassSimilarity(class1[0],class2[0]); for( i = 0; i < nbclasses1; i++ ){ for( j = 0; j < nbclasses2; j++ ){ @@ -247,22 +248,22 @@ public abstract class DistanceAlignment extends ObjectAlignment implements Align } } // Pass it to the algorithm - if ( ival == -1. ) { - int[][] result = HungarianAlgorithm.hgAlgorithm( matrix, "max" ); - // Extract the result - for( i=0; i < result.length ; i++ ){ - // The matrix has been destroyed - double val; - if ( sim.getSimilarity() ) val = sim.getClassSimilarity(class1[result[i][0]],class2[result[i][1]]); - else val = 1 - sim.getClassSimilarity(class1[result[i][0]],class2[result[i][1]]); - // JE: here using strict-> is a very good idea. - // it means that alignments with 0. similarity - // will be excluded from the best match. - if( val > threshold ){ - addCell( new ObjectCell( (String)null, class1[result[i][0]], class2[result[i][1]], BasicRelation.createRelation("="), val ) ); + if ( ival == -1. ) { // if values are the same, return an empty alignment + int[][] result = HungarianAlgorithm.hgAlgorithm( matrix, "max" ); + // Extract the result + for( i=0; i < result.length ; i++ ){ + // The matrix has been destroyed + double val; + if ( sim.getSimilarity() ) val = sim.getClassSimilarity(class1[result[i][0]],class2[result[i][1]]); + else val = 1 - sim.getClassSimilarity(class1[result[i][0]],class2[result[i][1]]); + // JE: here using strict-> is a very good idea. + // it means that correspondences with 0. similarity + // will be excluded from the best match. + if( val > threshold ){ + addCell( new ObjectCell( (String)null, class1[result[i][0]], class2[result[i][1]], BasicRelation.createRelation("="), val ) ); + } } } - } } catch (AlignmentException alex) { alex.printStackTrace(); } catch (OntowrapException owex) { owex.printStackTrace(); } // For properties -- GitLab