From 8c977c62db1be01129f1ec3d3036a8f570acf397 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr>
Date: Fri, 8 Jul 2005 07:23:36 +0000
Subject: [PATCH] - added new alignment extractor for 1:1 alignments

---
 lib/align.jar                                 | Bin 13129 -> 13129 bytes
 lib/alignwn.jar                               | Bin 15269 -> 15269 bytes
 lib/procalign.jar                             | Bin 76449 -> 77760 bytes
 .../exmo/align/impl/DistanceAlignment.java    | 138 +++++++++++++++---
 4 files changed, 120 insertions(+), 18 deletions(-)

diff --git a/lib/align.jar b/lib/align.jar
index 350259b13d126d4804221c71849146ecd14cf139..46333ba5794540445c8a29bf588b17a16e6bbdd0 100644
GIT binary patch
delta 46
wcmX?^b~24Oz?+$civa|#?tDIxSB3e?&gUCVrs^>Rxs%W6nSl74nf2XR0FMk3O#lD@

delta 46
wcmX?^b~24Oz?+$civa{?#6FqGtHL}z_Q^(*sd~&n?&LFiCLsQ1W_>pn0AO$r-2eap

diff --git a/lib/alignwn.jar b/lib/alignwn.jar
index b631f139f89e38e36c20157f66235ad9c70d6787..020946ca1bd9f9cd341b03a36e6a54d1da10f12e 100644
GIT binary patch
delta 46
wcmZ2lzO<Y-z?+$civa|#?tDIxSB3e?&gUCVJS~`k+{q0VCLsRi?H2Et0EA-`1^@s6

delta 46
wcmZ2lzO<Y-z?+$civa{?#6FqGtHL}z_Q^&QPYY%scXES;35dUWyTv;u09D5jmH+?%

diff --git a/lib/procalign.jar b/lib/procalign.jar
index 4c20b64fe3c4a003bb9ecfba8bcc0b7758140df6..411f799bab05bab691489e2ad4cfe013910af5f9 100644
GIT binary patch
delta 6979
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
MNN$vObvx4k0f?N4G5`Po

delta 5519
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

diff --git a/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java b/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java
index e600c97d..116b1823 100644
--- a/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java
+++ b/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java
@@ -21,10 +21,15 @@
 package fr.inrialpes.exmo.align.impl; 
 
 import java.lang.ClassNotFoundException;
+import java.lang.ClassCastException;
 import java.util.Hashtable;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Vector;
+import java.util.TreeSet;
+import java.util.SortedSet;
+import java.util.Set;
+import java.util.Comparator;
 import java.io.PrintStream;
 import java.io.IOException;
 import java.net.URI;
@@ -60,7 +65,6 @@ import fr.inrialpes.exmo.align.impl.ConcatenatedIterator;
  * @version $Id$ 
  */
 
-
 public class DistanceAlignment extends BasicAlignment implements AlignmentProcess
 {
     Similarity sim;
@@ -117,9 +121,10 @@ public class DistanceAlignment extends BasicAlignment implements AlignmentProces
 	double threshold = 0.;
 	if (  params.getParameter("threshold") != null )
 	    threshold = ((Double) params.getParameter("threshold")).doubleValue();
-	
+
+	//System.err.println("The type is "+type+" with length = "+type.length());
 	if ( type.equals("?*") || type.equals("1*") || type.equals("?+") || type.equals("1+") ) return extractqs( threshold, params );
-	else if ( type.equals("??") || type.equals("1?") || type.equals("?1") || type.equals("11") ) return extractqs( threshold, params );
+	else if ( type.equals("??") || type.equals("1?") || type.equals("?1") || type.equals("11") ) return extractqq( threshold, params );
 	else if ( type.equals("*?") || type.equals("+?") || type.equals("*1") || type.equals("+1") ) return extractqs( threshold, params );
 	else if ( type.equals("**") || type.equals("+*") || type.equals("*+") || type.equals("++") ) return extractqs( threshold, params );
 	// The else should be an error message
@@ -128,6 +133,7 @@ public class DistanceAlignment extends BasicAlignment implements AlignmentProces
 
     /**
      * Extract the alignment of a ?* type
+     * Complexity: O(n^2)
      */
     public Alignment extractqs( double threshold, Parameters params) {
       int i = 0, j = 0;
@@ -168,28 +174,124 @@ public class DistanceAlignment extends BasicAlignment implements AlignmentProces
 		      found = true; max = val; class2 = current;
 		  }
 	      }
-	      if ( found ) {
-		  addAlignCell(class1,class2, "=", max);
-	      }
+	      if ( found ) addAlignCell(class1,class2, "=", max);
 	  }
 	  // Extract for individuals
 	  // This does not work, at least for the OAEI 2005 tests
-	  /*	  for (Iterator it1 = onto1.getIndividuals().iterator(); it1.hasNext();) {
-	      OWLIndividual ind1 = (OWLIndividual)it1.next();
-	      found = false; max = threshold; val = 0;
-	      OWLIndividual ind2 = null;
-	      for (Iterator it2 = onto2.getIndividuals().iterator(); it2.hasNext(); ) {
-		  OWLIndividual current = (OWLIndividual)it2.next();
-		  val = 1 - sim.getIndividualSimilarity(ind1,current);
-		  if (val > max) {
-		      found = true; max = val; ind2 = current;
+	  if (  params.getParameter("noinst") == null ){
+	      for (Iterator it1 = onto1.getIndividuals().iterator(); it1.hasNext();) {
+		  OWLIndividual ind1 = (OWLIndividual)it1.next();
+		  found = false; max = threshold; val = 0;
+		  OWLIndividual ind2 = null;
+		  for (Iterator it2 = onto2.getIndividuals().iterator(); it2.hasNext(); ) {
+		      OWLIndividual current = (OWLIndividual)it2.next();
+		      val = 1 - sim.getIndividualSimilarity(ind1,current);
+		      if (val > max) {
+			  found = true; max = val; ind2 = current;
+		      }
 		  }
+		  System.err.println(ind1+" -- "+ind2+" = "+max);
+		  if ( found ) addAlignCell(ind1,ind2, "=", max);
 	      }
-	      System.err.println(ind1+" -- "+ind2+" = "+max);
-	      if ( found ) addAlignCell(ind1,ind2, "=", max);
-	      }*/
+	  }
       } catch (Exception e2) {e2.printStackTrace();}
       return((Alignment)this);
     }
 
+    /**
+     * Extract the alignment of a ?? type
+     * 
+     * Basic algorithm:
+     * 1) dump the part of the matrix distance above threshold in a sorted set
+     * 2) traverse the sorted set and each time a correspondence involving two
+     *    entities that have no correspondence is encountered, add it to the 
+     *    alignment.
+     * Complexity: O(n^2.logn)
+     * Pitfall: no global optimality is warranted
+     * for instance if there is the following matrix:
+     * (a,a')=1., (a,b')=.9, (b,a')=.9, (b,b')=.1
+     * This algorithm will select the first and last correspondances of
+     * overall similarity 1.1, while the optimum is the second solution
+     * with overall of 1.8.
+     */
+    public Alignment extractqq( double threshold, Parameters params) {
+      OWLEntity ent1=null, ent2=null;
+      double val = 0;
+      //TreeSet could be replaced by something else
+      //The comparator must always tell that things are different!
+      SortedSet cellSet = new TreeSet(
+			    new Comparator() {
+				public int compare( Object o1, Object o2 )
+				    throws ClassCastException{
+				    if ( o1 instanceof Cell
+					 && o2 instanceof Cell ) {
+					if ( ((Cell)o1).getStrength() > ((Cell)o2).getStrength() ){
+					    return -1;
+					} else { return 1; }
+				    } else {
+					throw new ClassCastException();
+				    }}});
+
+      try {
+	  // Get all the matrix above threshold in the SortedSet
+	  // Plus a map from the objects to the cells
+	  // O(n^2.log n)
+	  ConcatenatedIterator pit1 = new 
+	      ConcatenatedIterator(onto1.getObjectProperties().iterator(),
+				    onto1.getDataProperties().iterator());
+	  for (; pit1.hasNext(); ) {
+	      ent1 = (OWLProperty)pit1.next();
+	      ConcatenatedIterator pit2 = new 
+		  ConcatenatedIterator(onto2.getObjectProperties().iterator(),
+				       onto2.getDataProperties().iterator());
+	      for (; pit2.hasNext(); ) {
+		  ent2 = (OWLProperty)pit2.next();
+		  val = 1 - sim.getPropertySimilarity((OWLProperty)ent1,(OWLProperty)ent2);
+		  //val = ((SimilarityMeasure)getSimilarity()).getSimilarity(ent1.getURI(),ent2.getURI());
+		  if ( val > threshold ){
+		      cellSet.add( new BasicCell( ent1, ent2, "=", val ) );
+		  }
+	      }
+	  }
+	  for (Iterator it1 = onto1.getClasses().iterator(); it1.hasNext(); ) {
+	      ent1 = (OWLClass)it1.next();
+	      for (Iterator it2 = onto2.getClasses().iterator(); it2.hasNext(); ) {
+		  ent2 = (OWLClass)it2.next();
+		  val = 1 - sim.getClassSimilarity((OWLClass)ent1,(OWLClass)ent2);
+		  //val = ((SimilarityMeasure)getSimilarity()).getSimilarity(ent1.getURI(),ent2.getURI());
+		  if ( val > threshold ){
+		      cellSet.add( new BasicCell( ent1, ent2, "=", val ) );
+		  }
+	      }
+	  }
+	  // OLA with or without instances
+	  if (  params.getParameter("noinst") == null ){
+	      for (Iterator it1 = onto1.getIndividuals().iterator(); it1.hasNext();) {
+		  ent1 = (OWLIndividual)it1.next();
+		  for (Iterator it2 = onto2.getIndividuals().iterator(); it2.hasNext(); ) {
+		      ent2 = (OWLIndividual)it2.next();
+		      val = 1 - sim.getIndividualSimilarity((OWLIndividual)ent1,(OWLIndividual)ent2);
+		      //val = ((SimilarityMeasure)getSimilarity()).getSimilarity(ent1.getURI(),ent2.getURI());
+		      if ( val > threshold ){
+			  cellSet.add( new BasicCell( ent1, ent2, "=", val ) );
+		      }
+		  }
+	      }
+	  }
+
+	  // O(n^2)
+	  for( Iterator it = cellSet.iterator(); it.hasNext(); ){
+	      Cell cell = (Cell)it.next();
+	      ent1 = (OWLEntity)cell.getObject1();
+	      ent2 = (OWLEntity)cell.getObject2();
+	      if ( (getAlignCell1( ent1 ) == null) && (getAlignCell2( ent2 ) == null) ){
+		  // The cell is directly added!
+		  addCell( ent1, ent2, cell );
+	      }
+	  };
+
+      } catch (Exception e) { e.printStackTrace(); }
+      return((Alignment)this);
+    }
+
 }
-- 
GitLab