diff --git a/src/fr/inrialpes/exmo/align/util/EvalAlign.java b/src/fr/inrialpes/exmo/align/util/EvalAlign.java index 8035e7c5bfc3a8340595982ef651c944a554aedb..3d176fcbdbca456ddd8124d52f65a7fb3ae6e84a 100644 --- a/src/fr/inrialpes/exmo/align/util/EvalAlign.java +++ b/src/fr/inrialpes/exmo/align/util/EvalAlign.java @@ -55,8 +55,11 @@ import fr.inrialpes.exmo.align.impl.BasicEvaluator; import fr.inrialpes.exmo.align.impl.eval.PRecEvaluator; import fr.inrialpes.exmo.align.impl.BasicParameters; -import java.io.PrintStream; +import java.io.OutputStream; import java.io.FileOutputStream; +import java.io.PrintWriter; +import java.io.BufferedWriter; +import java.io.OutputStreamWriter; import java.net.URI; import java.util.Hashtable; @@ -110,7 +113,7 @@ public class EvalAlign { String alignName2 = null; String filename = null; String classname = null; - PrintStream writer = null; + PrintWriter writer = null; LongOpt[] longopts = new LongOpt[7]; int debug = 0; @@ -188,14 +191,20 @@ public class EvalAlign { // Compare eval.eval(params) ; - // Print result - if ( filename == null ) { - writer = (PrintStream)System.out; + // Set output file + OutputStream stream; + if (filename == null) { + //writer = (PrintStream) System.out; + stream = System.out; } else { - writer = new PrintStream(new FileOutputStream( filename )); + //writer = new PrintStream(new FileOutputStream(filename)); + stream = new FileOutputStream(filename); } - + writer = new PrintWriter ( + new BufferedWriter( + new OutputStreamWriter( stream, "UTF-8" )), true); eval.write( writer ); + writer.flush(); } catch (Exception ex) { ex.printStackTrace(); diff --git a/src/fr/inrialpes/exmo/align/util/ParserPrinter.java b/src/fr/inrialpes/exmo/align/util/ParserPrinter.java index 3c89e17bb7c8fb0323889bb92501a5cac9f1f1b7..3265ed42de3ad1081a523c006d522f827f057d15 100644 --- a/src/fr/inrialpes/exmo/align/util/ParserPrinter.java +++ b/src/fr/inrialpes/exmo/align/util/ParserPrinter.java @@ -50,8 +50,11 @@ import org.semanticweb.owl.align.AlignmentVisitor; import fr.inrialpes.exmo.align.impl.renderer.RDFRendererVisitor; -import java.io.PrintStream; +import java.io.OutputStream; import java.io.FileOutputStream; +import java.io.PrintWriter; +import java.io.BufferedWriter; +import java.io.OutputStreamWriter; import java.net.URI; import java.util.Hashtable; @@ -104,19 +107,24 @@ public class ParserPrinter { Alignment result = null; String initName = null; String filename = null; - PrintStream writer = null; + PrintWriter writer = null; AlignmentVisitor renderer = null; LongOpt[] longopts = new LongOpt[7]; int debug = 0; - boolean inverse = false; - + String rendererClass = null; + boolean inverse = false; + double threshold = 0; + String cutMethod = "hard"; + longopts[0] = new LongOpt("help", LongOpt.NO_ARGUMENT, null, 'h'); longopts[1] = new LongOpt("output", LongOpt.REQUIRED_ARGUMENT, null, 'o'); longopts[2] = new LongOpt("debug", LongOpt.OPTIONAL_ARGUMENT, null, 'd'); longopts[3] = new LongOpt("renderer", LongOpt.REQUIRED_ARGUMENT, null, 'r'); longopts[4] = new LongOpt("inverse", LongOpt.NO_ARGUMENT, null, 'i'); + longopts[5] = new LongOpt("threshold", LongOpt.REQUIRED_ARGUMENT, null, 't'); + longopts[6] = new LongOpt("cutmethod", LongOpt.REQUIRED_ARGUMENT, null, 'T'); - Getopt g = new Getopt("", args, "hio:d::r:", longopts); + Getopt g = new Getopt("", args, "hio:t:T:d::r:", longopts); int c; String arg; @@ -134,15 +142,15 @@ public class ParserPrinter { break; case 'r': /* Use the given class for rendernig */ - String renderingClass = g.getOptarg(); - try { - renderer = (AlignmentVisitor) ClassLoader.getSystemClassLoader().loadClass(renderingClass).newInstance(); - } catch (Exception ex) { - System.err.println("Cannot create renderer " + - renderingClass + "\n" + ex.getMessage() ); - usage(); - return; - } + rendererClass = g.getOptarg(); + break; + case 't' : + /* Threshold */ + threshold = Double.parseDouble(g.getOptarg()); + break; + case 'T' : + /* Cut method */ + cutMethod = g.getOptarg(); break; case 'd': /* Debug level */ @@ -169,17 +177,43 @@ public class ParserPrinter { AlignmentParser aparser = new AlignmentParser( debug ); result = aparser.parse( initName, new Hashtable() ); if ( debug > 0 ) System.err.println(" Alignment structure parsed"); - if ( filename == null ) { - writer = (PrintStream)System.out; + // Set output file + OutputStream stream; + if (filename == null) { + //writer = (PrintStream) System.out; + stream = System.out; } else { - writer = new PrintStream(new FileOutputStream( filename )); + //writer = new PrintStream(new FileOutputStream(filename)); + stream = new FileOutputStream(filename); } + writer = new PrintWriter ( + new BufferedWriter( + new OutputStreamWriter( stream, "UTF-8" )), true); if ( inverse ) result.inverse(); + // Thresholding + if (threshold != 0) result.cut( cutMethod, threshold ); + //result.write( writer ); - if ( renderer == null ) renderer = new RDFRendererVisitor( writer ); - result.render( writer, renderer ); + if ( rendererClass == null ) renderer = new RDFRendererVisitor( writer ); + else { + try { + //renderer = (AlignmentVisitor) ClassLoader.getSystemClassLoader().loadClass(renderingClass).newInstance(); + Object[] mparams = {(Object) writer }; + java.lang.reflect.Constructor[] rendererConstructors = + Class.forName(rendererClass).getConstructors(); + renderer = + (AlignmentVisitor) rendererConstructors[0].newInstance(mparams); + } catch (Exception ex) { + System.err.println("Cannot create renderer " + + rendererClass + "\n" + ex.getMessage() ); + usage(); + return; + } + } + result.render( renderer ); + writer.flush(); } catch (Exception ex) { ex.printStackTrace(); @@ -187,7 +221,7 @@ public class ParserPrinter { } public static void usage() { - System.out.println("usage: ParserPrinter [options] URI1 URI2"); + System.out.println("usage: ParserPrinter [options] URI"); System.out.println("options are:"); //System.out.println("\t--alignment=filename -a filename Start from an XML alignment file"); System.out.println("\t--debug[=n] -d [n]\t\tReport debug info at level ,"); diff --git a/src/fr/inrialpes/exmo/align/util/Procalign.java b/src/fr/inrialpes/exmo/align/util/Procalign.java index 01bf77407350c7e474356ab9ace4b67aa1e5b67c..a049345a85c0cb6c371615a9e67a3f5c849f06f6 100644 --- a/src/fr/inrialpes/exmo/align/util/Procalign.java +++ b/src/fr/inrialpes/exmo/align/util/Procalign.java @@ -49,8 +49,11 @@ import org.semanticweb.owl.io.owl_rdf.OWLRDFErrorHandler; import org.semanticweb.owl.io.ParserException; import org.semanticweb.owl.io.Parser; -import java.io.PrintStream; +import java.io.OutputStream; import java.io.FileOutputStream; +import java.io.PrintWriter; +import java.io.BufferedWriter; +import java.io.OutputStreamWriter; import java.net.URI; import java.util.Hashtable; import java.lang.Double; @@ -116,12 +119,14 @@ public class Procalign { OWLOntology onto1 = null; OWLOntology onto2 = null; AlignmentProcess result = null; + String cutMethod = "hard"; String initName = null; Alignment init = null; String alignmentClassName = "fr.inrialpes.exmo.align.impl.method.ClassNameEqAlignment"; String filename = null; String rendererClass = "fr.inrialpes.exmo.align.impl.renderer.RDFRendererVisitor"; - PrintStream writer = null; + //PrintStream writer = null; + PrintWriter writer = null; AlignmentVisitor renderer = null; int debug = 0; double threshold = 0; @@ -134,9 +139,10 @@ public class Procalign { longopts[3] = new LongOpt("renderer", LongOpt.REQUIRED_ARGUMENT, null, 'r'); longopts[4] = new LongOpt("debug", LongOpt.OPTIONAL_ARGUMENT, null, 'd'); longopts[5] = new LongOpt("impl", LongOpt.REQUIRED_ARGUMENT, null, 'i'); - longopts[7] = new LongOpt("threshold", LongOpt.REQUIRED_ARGUMENT, null, 't'); + longopts[6] = new LongOpt("threshold", LongOpt.REQUIRED_ARGUMENT, null, 't'); + longopts[7] = new LongOpt("cutmethod", LongOpt.REQUIRED_ARGUMENT, null, 'T'); - Getopt g = new Getopt("", args, "ho:a:d::r:t:i:", longopts); + Getopt g = new Getopt("", args, "ho:a:d::r:t:T:i:", longopts); int c; String arg; @@ -165,6 +171,10 @@ public class Procalign { /* Threshold */ threshold = Double.parseDouble(g.getOptarg()); break; + case 'T' : + /* Cut method */ + cutMethod = g.getOptarg(); + break; case 'd' : /* Debug level */ arg = g.getOptarg(); @@ -243,18 +253,20 @@ public class Procalign { result.align(init, params); // add opts // Thresholding - if (threshold != 0) { - ((BasicAlignment) result).cut(threshold); - }; + if (threshold != 0) result.cut( cutMethod, threshold ); if (debug > 0) System.err.println(" Alignment performed"); // Set output file + OutputStream stream; if (filename == null) { - writer = (PrintStream) System.out; + stream = System.out; } else { - writer = new PrintStream(new FileOutputStream(filename)); + stream = new FileOutputStream(filename); } + writer = new PrintWriter ( + new BufferedWriter( + new OutputStreamWriter( stream, "UTF-8" )), true); // Result printing (to be reimplemented with a default value) try { @@ -271,7 +283,8 @@ public class Procalign { } // Output - result.render(writer, renderer); + result.render(renderer); + writer.flush(); } catch (Exception ex) { throw ex; @@ -298,6 +311,7 @@ public class Procalign { System.out.println("\t--output=filename -o filename\tOutput the alignment in filename"); System.out.println("\t--alignment=filename -a filename Start from an XML alignment file"); System.out.println("\t--threshold=double -t double\tFilters the similarities under threshold"); + System.out.println("\t--cutmethod=hard|perc|prop|best|span -T hard|perc|prop|best|span\tmethod for computing the threshold"); System.out.println("\t--debug[=n] -d [n]\t\tReport debug info at level n"); System.out.println("\t--help -h\t\t\tPrint this message"); }