From d987234174742a504fb987ed1b9d14915bc10f0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Euzenat?= <Jerome.Euzenat@inria.fr> Date: Wed, 15 Jan 2014 20:07:39 +0000 Subject: [PATCH] - Genericised a bit evaluation output --- src/fr/inrialpes/exmo/align/cli/GenPlot.java | 9 ++++++--- .../inrialpes/exmo/align/cli/GroupEval.java | 20 ++++++++++++++++--- .../exmo/align/impl/eval/PRecEvaluator.java | 2 +- .../align/impl/eval/WeightedPREvaluator.java | 2 +- test/clitest.sh | 6 +++--- 5 files changed, 28 insertions(+), 11 deletions(-) diff --git a/src/fr/inrialpes/exmo/align/cli/GenPlot.java b/src/fr/inrialpes/exmo/align/cli/GenPlot.java index f2a92e13..13847d3e 100644 --- a/src/fr/inrialpes/exmo/align/cli/GenPlot.java +++ b/src/fr/inrialpes/exmo/align/cli/GenPlot.java @@ -154,12 +154,15 @@ public class GenPlot extends CommonCLI { System.exit(-1); } - Class<?> graphClass = Class.forName(graphCN); + Class<?> graphClass = Class.forName( graphCN ); Class[] cparams = {}; graphConstructor = graphClass.getConstructor( cparams ); - //Class<?> evalClass = Class.forName(evalCN); - //evalConstructor = evalClass.getConstructor( cparams ); + // JE: This is not used + Class<?> evalClass = Class.forName( evalCN ); + Class<?> alClass = Class.forName( "org.semanticweb.owl.align.Alignment" ); + Class[] caparams = { alClass, alClass }; + evalConstructor = evalClass.getConstructor( caparams ); // Collect correspondences from alignments in all directories // . -> Vector<EvalCell> diff --git a/src/fr/inrialpes/exmo/align/cli/GroupEval.java b/src/fr/inrialpes/exmo/align/cli/GroupEval.java index ec3acb6a..d858439a 100644 --- a/src/fr/inrialpes/exmo/align/cli/GroupEval.java +++ b/src/fr/inrialpes/exmo/align/cli/GroupEval.java @@ -28,6 +28,7 @@ import org.semanticweb.owl.align.Alignment; import org.semanticweb.owl.align.Evaluator; import fr.inrialpes.exmo.align.impl.eval.PRecEvaluator; +import fr.inrialpes.exmo.align.impl.eval.WeightedPREvaluator; //JE:merge import fr.inrialpes.exmo.ontowrap.OntologyFactory; import fr.inrialpes.exmo.ontowrap.OntowrapException; @@ -37,6 +38,7 @@ import java.io.PrintStream; import java.io.FileOutputStream; import java.io.FileNotFoundException; import java.lang.Integer; +import java.lang.reflect.Constructor; import java.util.Hashtable; import java.util.Vector; import java.util.Enumeration; @@ -68,6 +70,7 @@ import fr.inrialpes.exmo.align.parser.AlignmentParser; where the options are: <pre> -o filename --output=filename + -e classname --evaluator=classname -f format = prfot (precision/recall/f-measure/overall/time) --format=prfot -r filename --reference=filename -s algo/measure @@ -101,11 +104,14 @@ public class GroupEval extends CommonCLI { int size = 0; String color = null; String ontoDir = null; + String classname = "fr.inrialpes.exmo.align.impl.eval.PRecEvaluator"; + Constructor evalConstructor = null; public GroupEval() { super(); options.addOption( OptionBuilder.withLongOpt( "list" ).hasArgs().withValueSeparator(',').withDescription( "List of FILEs to be included in the results (required)" ).withArgName("FILE").create( 'l' ) ); options.addOption( OptionBuilder.withLongOpt( "color" ).hasOptionalArg().withDescription( "Color even lines of the output in COLOR (default: lightblue)" ).withArgName("COLOR").create( 'c' ) ); + options.addOption( OptionBuilder.withLongOpt( "evaluator" ).hasArg().withDescription( "Use CLASS as evaluation plotter" ).withArgName("CLASS").create( 'e' ) ); options.addOption( OptionBuilder.withLongOpt( "format" ).hasArg().withDescription( "Used MEASures and order (precision/recall/f-measure/overall/time) (default: "+format+")" ).withArgName("MEAS").create( 'f' ) ); options.addOption( OptionBuilder.withLongOpt( "type" ).hasArg().withDescription( "Output TYPE (html|xml|tex|ascii|triangle; default: "+type+")" ).withArgName("TYPE").create( 't' ) ); //options.addOption( OptionBuilder.withLongOpt( "sup" ).hasArg().withDescription( "Specifies if dominant columns are algorithms or measure" ).withArgName("algo").create( 's' ) ); @@ -129,6 +135,7 @@ public class GroupEval extends CommonCLI { if ( line == null ) return; // --help // Here deal with command specific arguments + if ( line.hasOption( 'e' ) ) classname = line.getOptionValue( 'e' ); if ( line.hasOption( 'f' ) ) format = line.getOptionValue( 'f' ); if ( line.hasOption( 'r' ) ) reference = line.getOptionValue( 'r' ); if ( line.hasOption( 's' ) ) dominant = line.getOptionValue( 's' ); @@ -145,6 +152,11 @@ public class GroupEval extends CommonCLI { System.exit( -1 ); } + Class<?> evalClass = Class.forName( classname ); + Class<?> alClass = Class.forName( "org.semanticweb.owl.align.Alignment" ); + Class[] cparams = { alClass, alClass }; + evalConstructor = evalClass.getConstructor( cparams ); + print( iterateDirectories() ); } @@ -153,9 +165,9 @@ public class GroupEval extends CommonCLI { File [] subdir = null; try { if (ontoDir == null) { - subdir = (new File(System.getProperty("user.dir"))).listFiles(); + subdir = ( new File(System.getProperty("user.dir") ) ).listFiles(); } else { - subdir = (new File(ontoDir)).listFiles(); + subdir = ( new File(ontoDir) ).listFiles(); } } catch ( Exception e ) { logger.error( "Cannot stat dir ", e ); @@ -219,7 +231,9 @@ public class GroupEval extends CommonCLI { Alignment align2 = aparser.parse( alignName2 ); //logger.trace(" Alignment structure2 parsed"); // Create evaluator object - eval = new PRecEvaluator( align1, align2 ); + //eval = new PRecEvaluator( align1, align2 ); + Object[] mparams = { align1, align2 }; + eval = (Evaluator) evalConstructor.newInstance(mparams); // Compare eval.eval( parameters ) ; } catch (Exception ex) { diff --git a/src/fr/inrialpes/exmo/align/impl/eval/PRecEvaluator.java b/src/fr/inrialpes/exmo/align/impl/eval/PRecEvaluator.java index 0817f36b..4839ba87 100644 --- a/src/fr/inrialpes/exmo/align/impl/eval/PRecEvaluator.java +++ b/src/fr/inrialpes/exmo/align/impl/eval/PRecEvaluator.java @@ -80,7 +80,7 @@ public class PRecEvaluator extends BasicEvaluator implements Evaluator { * The two parameters are transformed into URIAlignment before being processed * Hence, if one of them is modified after initialisation, this will not be taken into account. **/ - public PRecEvaluator(Alignment align1, Alignment align2) throws AlignmentException { + public PRecEvaluator( Alignment align1, Alignment align2 ) throws AlignmentException { super(((BasicAlignment)align1).toURIAlignment(), ((BasicAlignment)align2).toURIAlignment()); } diff --git a/src/fr/inrialpes/exmo/align/impl/eval/WeightedPREvaluator.java b/src/fr/inrialpes/exmo/align/impl/eval/WeightedPREvaluator.java index e91fbed1..ce4b1e50 100644 --- a/src/fr/inrialpes/exmo/align/impl/eval/WeightedPREvaluator.java +++ b/src/fr/inrialpes/exmo/align/impl/eval/WeightedPREvaluator.java @@ -49,7 +49,7 @@ import org.slf4j.LoggerFactory; * Basic relation sensitivity has been implemented * * @author Jerome Euzenat - * @version $Id: PRecEvaluator.java 1494 2010-07-23 14:43:36Z euzenat $ + * @version $Id: WeightedPRecEvaluator.java 1494 2010-07-23 14:43:36Z euzenat $ */ public class WeightedPREvaluator extends BasicEvaluator implements Evaluator { diff --git a/test/clitest.sh b/test/clitest.sh index 00a4bd38..eed6d1ce 100644 --- a/test/clitest.sh +++ b/test/clitest.sh @@ -906,11 +906,11 @@ if [ -s $RESDIR/genplot-w2.tex ]; then diff $RESDIR/genplot-o1.tex $RESDIR/genpl echo "\t-e,--evaluator <CLASS>" mv lev1.table $RESDIR/lev1-init.table -java -cp $CP fr.inrialpes.exmo.align.cli.GenPlot -e fr.inrialpes.exmo.align.impl.eval.WeightedPRecEvaluator -l "refalign,edna1,streq1,lev1" -w $RESDIR/smalltest -o $RESDIR/genplot-e1.tex +java -cp $CP fr.inrialpes.exmo.align.cli.GenPlot -e fr.inrialpes.exmo.align.impl.eval.WeightedPREvaluator -l "refalign,edna1,streq1,lev1" -w $RESDIR/smalltest -o $RESDIR/genplot-e1.tex if [ -s lev1.table ]; then diff $RESDIR/lev1-init.table lev1.table > $RESDIR/smalltest/diffgrev-e1.txt; else echo error with GENPLOT-EVA1; fi -echo "--> These are the same values for both evaluators, so the error" +echo "--> This is not used yet!" if [ ! -s $RESDIR/smalltest/diffgrev-e1.txt ]; then echo error with GENPLOT-EVA2; fi -java -cp $CP fr.inrialpes.exmo.align.cli.GenPlot --evaluator fr.inrialpes.exmo.align.impl.eval.WeightedPRecEvaluator -l "refalign,edna1,streq1,lev1" -w $RESDIR/smalltest -o $RESDIR/genplot-e2.tex +java -cp $CP fr.inrialpes.exmo.align.cli.GenPlot --evaluator fr.inrialpes.exmo.align.impl.eval.WeightedPREvaluator -l "refalign,edna1,streq1,lev1" -w $RESDIR/smalltest -o $RESDIR/genplot-e2.tex if [ -s $RESDIR/genplot-e2.tex ]; then diff $RESDIR/genplot-e1.tex $RESDIR/genplot-e2.tex ; else echo error with GENPLOT-EVA3; fi #------------------- -- GitLab