diff --git a/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java b/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java index 5f21eafdbd05c36c0b9edb8438c06d1799d2d0bc..465683e7bc2754ec3560e839c462999e9c6b708b 100644 --- a/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java +++ b/src/fr/inrialpes/exmo/align/impl/BasicAlignment.java @@ -436,6 +436,14 @@ public class BasicAlignment implements Alignment { } }; + /** + * Returns default exception for conversion to URIAlignments + * + */ + public URIAlignment toURIAlignment() throws AlignmentException { + throw new AlignmentException("[BasicAlignment].toURIAlignment() cannot process"); + } + /*************************************************************************** * The harden function acts like threshold but put all weights to 1. **************************************************************************/ @@ -562,6 +570,12 @@ public class BasicAlignment implements Alignment { public void render( AlignmentVisitor renderer ) throws AlignmentException { accept(renderer); } + + /** + * Can be used for reducing the amount of memory taken by an alignment + * Does nothing in BasicAlignment. + */ + public void cleanUp() {} } class MEnumeration implements Enumeration { diff --git a/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java b/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java index b41ad40155557813dc57849d04c049bc7867f3a1..9e84e6088800df43e1562fa3dc0cce193766304d 100644 --- a/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java +++ b/src/fr/inrialpes/exmo/align/impl/DistanceAlignment.java @@ -96,6 +96,9 @@ public class DistanceAlignment extends OWLAPIAlignment implements AlignmentProce extract( getType(), params ); } + /** + * Prints the distance matrix + */ public void printDistanceMatrix( Parameters params ){ System.out.println("\\documentclass{article}\n"); System.out.println("\\usepackage{graphics}\n"); @@ -109,6 +112,13 @@ public class DistanceAlignment extends OWLAPIAlignment implements AlignmentProce System.out.println("\n\\end{document}"); } + /** + * Suppresses the distance matrix + */ + public void cleanUp() { + sim = null; + } + /** * Extract the alignment form the Similarity * There are theoretically 16 types of extractors composing the @@ -186,16 +196,20 @@ public class DistanceAlignment extends OWLAPIAlignment implements AlignmentProce if ( params.getParameter("noinst") == null ){ for (Iterator it1 = ((OWLOntology)onto1).getIndividuals().iterator(); it1.hasNext();) { OWLIndividual ind1 = (OWLIndividual)it1.next(); - found = false; max = threshold; val = 0; - OWLIndividual ind2 = null; - for (Iterator it2 = ((OWLOntology)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 ( ind1.getURI() != null ) { + found = false; max = threshold; val = 0; + OWLIndividual ind2 = null; + for (Iterator it2 = ((OWLOntology)onto2).getIndividuals().iterator(); it2.hasNext(); ) { + OWLIndividual current = (OWLIndividual)it2.next(); + if ( current.getURI() != null ) { + val = 1 - sim.getIndividualSimilarity(ind1,current); + if (val > max) { + found = true; max = val; ind2 = current; + } + } } + if ( found ) addAlignCell(ind1,ind2, "=", max); } - if ( found ) addAlignCell(ind1,ind2, "=", max); } } } catch (OWLException owlex) { owlex.printStackTrace(); } @@ -393,12 +407,17 @@ public class DistanceAlignment extends OWLAPIAlignment implements AlignmentProce if ( params.getParameter("noinst") == null ){ for (Iterator it1 = ((OWLOntology)onto1).getIndividuals().iterator(); it1.hasNext();) { ent1 = (OWLIndividual)it1.next(); - for (Iterator it2 = ((OWLOntology)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 OWLAPICell( (String)null, ent1, ent2, BasicRelation.createRelation("="), val ) ); + if ( ent1.getURI() != null ) { + + for (Iterator it2 = ((OWLOntology)onto2).getIndividuals().iterator(); it2.hasNext(); ) { + ent2 = (OWLIndividual)it2.next(); + if ( ent2.getURI() != null ) { + val = 1 - sim.getIndividualSimilarity((OWLIndividual)ent1,(OWLIndividual)ent2); + //val = ((SimilarityMeasure)getSimilarity()).getSimilarity(ent1.getURI(),ent2.getURI()); + if ( val > threshold ){ + cellSet.add( new OWLAPICell( (String)null, ent1, ent2, BasicRelation.createRelation("="), val ) ); + } + } } } } diff --git a/src/fr/inrialpes/exmo/align/impl/MatrixMeasure.java b/src/fr/inrialpes/exmo/align/impl/MatrixMeasure.java index 6e112b9b4a3e87f02bc6ec474e699c61b8723522..99b282f7e4c5a9c70f951e86ee06424247e41246 100644 --- a/src/fr/inrialpes/exmo/align/impl/MatrixMeasure.java +++ b/src/fr/inrialpes/exmo/align/impl/MatrixMeasure.java @@ -112,11 +112,23 @@ public abstract class MatrixMeasure implements Similarity { } prmatrix = new double[nbprop1+1][nbprop2+1]; // Create individual lists - for ( Iterator it = onto2.getIndividuals().iterator(); it.hasNext(); nbind2++ ){ - indlist2.put( it.next(), new Integer(nbind2) ); + for ( Iterator it = onto2.getIndividuals().iterator(); it.hasNext(); ){ + OWLIndividual o = (OWLIndividual)it.next(); + //System.err.println( o ); + // We suppress anonymous individuals... this is not legitimate + if ( o.getURI() != null ) { + indlist2.put( o, new Integer(nbind2) ); + nbind2++; + } } - for ( Iterator it = onto1.getIndividuals().iterator(); it.hasNext(); nbind1++ ){ - indlist1.put( it.next(), new Integer(nbind1) ); + for ( Iterator it = onto1.getIndividuals().iterator(); it.hasNext(); ){ + OWLIndividual o = (OWLIndividual)it.next(); + //System.err.println( o ); + // We suppress anonymous individuals... this is not legitimate + if ( o.getURI() != null ) { + indlist1.put( o, new Integer(nbind1) ); + nbind1++; + } } indmatrix = new double[nbind1+1][nbind2+1]; @@ -137,9 +149,13 @@ public abstract class MatrixMeasure implements Similarity { // (this comes first because otherwise, it2 is defined) for ( Iterator it2 = onto2.getIndividuals().iterator(); it2.hasNext(); ){ OWLIndividual ind2 = (OWLIndividual)it2.next(); - for ( Iterator it1 = onto1.getIndividuals().iterator(); it1.hasNext(); ){ - OWLIndividual ind1 = (OWLIndividual)it1.next(); - indmatrix[((Integer)indlist1.get(ind1)).intValue()][((Integer)indlist2.get(ind2)).intValue()] = measure( ind1, ind2 ); + if ( indlist2.get(ind2) != null ) { + for ( Iterator it1 = onto1.getIndividuals().iterator(); it1.hasNext(); ){ + OWLIndividual ind1 = (OWLIndividual)it1.next(); + if ( indlist1.get(ind1) != null ) { + indmatrix[((Integer)indlist1.get(ind1)).intValue()][((Integer)indlist2.get(ind2)).intValue()] = measure( ind1, ind2 ); + } + } } } // Compute distances on properties diff --git a/src/fr/inrialpes/exmo/align/impl/OWLAPIAlignment.java b/src/fr/inrialpes/exmo/align/impl/OWLAPIAlignment.java index 05aa5a5d90a1971c404efd25a5ac2db3fe82f0af..bfad92bdb8c8c01ded9a7d1a4c94a6b2d36659d3 100644 --- a/src/fr/inrialpes/exmo/align/impl/OWLAPIAlignment.java +++ b/src/fr/inrialpes/exmo/align/impl/OWLAPIAlignment.java @@ -245,7 +245,11 @@ public class OWLAPIAlignment extends BasicAlignment { } for (Enumeration e = getElements(); e.hasMoreElements();) { Cell c = (Cell)e.nextElement(); - align.addAlignCell( c.getId(), c.getObject1AsURI(), c.getObject2AsURI(), c.getRelation(), c.getStrength() ); + try { + align.addAlignCell( c.getId(), c.getObject1AsURI(), c.getObject2AsURI(), c.getRelation(), c.getStrength() ); + } catch (AlignmentException aex) { + // Sometimes URIs are null, this is ignore + } }; return align; } diff --git a/src/fr/inrialpes/exmo/align/impl/URIAlignment.java b/src/fr/inrialpes/exmo/align/impl/URIAlignment.java index a95407e6b430fed789f5cc536e170c12a9b1f6fb..871ba9a40d99a87558bcc37b4f2b0cd6a91291e7 100644 --- a/src/fr/inrialpes/exmo/align/impl/URIAlignment.java +++ b/src/fr/inrialpes/exmo/align/impl/URIAlignment.java @@ -86,7 +86,6 @@ public class URIAlignment extends BasicAlignment { /** Cell methods **/ public Cell addAlignCell(String id, Object ob1, Object ob2, Relation relation, double measure) throws AlignmentException { - if ( !( ob1 instanceof URI && ob2 instanceof URI ) ) throw new AlignmentException("arguments must be URIs"); @@ -153,6 +152,14 @@ public class URIAlignment extends BasicAlignment { } } + /** + * Returns default exception for conversion to URIAlignments + * + */ + public URIAlignment toURIAlignment() throws AlignmentException { + return this; + } + /** * Generate a copy of this alignment object */ diff --git a/src/fr/inrialpes/exmo/align/impl/eval/PRecEvaluator.java b/src/fr/inrialpes/exmo/align/impl/eval/PRecEvaluator.java index fcc706254de56ead188b2c9f434d9a3acec26517..2e38ce445c8f93e9a7c6c0059cd4a053cbfe3fdc 100644 --- a/src/fr/inrialpes/exmo/align/impl/eval/PRecEvaluator.java +++ b/src/fr/inrialpes/exmo/align/impl/eval/PRecEvaluator.java @@ -26,6 +26,7 @@ import org.semanticweb.owl.align.Cell; import org.semanticweb.owl.align.Parameters; import fr.inrialpes.exmo.align.impl.BasicEvaluator; +import fr.inrialpes.exmo.align.impl.BasicAlignment; import java.util.Enumeration; import java.util.Iterator; @@ -64,8 +65,8 @@ public class PRecEvaluator extends BasicEvaluator { private int nbcorrect = 0; // nb of cells correctly identified /** Creation **/ - public PRecEvaluator(Alignment align1, Alignment align2) { - super(align1, align2); + public PRecEvaluator(Alignment align1, Alignment align2) throws AlignmentException { + super(((BasicAlignment)align1).toURIAlignment(), ((BasicAlignment)align2).toURIAlignment()); } public void init(){