Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 7a24ae61 authored by Jérôme Euzenat's avatar Jérôme Euzenat
Browse files

- (nearly) fully implemented relaxed precision and recall

parent 3cf30085
No related branches found
No related tags found
No related merge requests found
...@@ -39,15 +39,14 @@ The development of 4 versions continue. ...@@ -39,15 +39,14 @@ The development of 4 versions continue.
<p><ul compact="1"> <p><ul compact="1">
<li>Implement full OWL rendering of EDOAL (impl)</li> <li>Implement full OWL rendering of EDOAL (impl)</li>
<li>Adding type checking to EDOAL parser (parser)</li> <li>Adding type checking to EDOAL parser (parser)</li>
<li>Implement fully relaxed precision and recall (impl)</li>
<li>Implement database store for EDOAL (server)</li> <li>Implement database store for EDOAL (server)</li>
<li>Integrate some basic reasoning.</li> <li>Integrate some basic reasoning.</li>
<li>Complete tutorial4 with distributed reasoning.</li> <li>Complete tutorial4 with distributed reasoning.</li>
<li>Genericize evaluators in <tt>GraphEvaluator</tt> and <tt>GenPlot</tt> (eval)</li> <li>Genericize evaluators in <tt>GraphEvaluator</tt> and <tt>GenPlot</tt> (eval)</li>
<li>Implementation of a provenance metadata tag (server/impl)</li> <li>Implementation of a provenance metadata tag (server/impl)</li>
<li>Providing a <tt>DiffAlign( al1, al2 )</tt> evaluator (impl) and interface (util)</li>
<li>Replace <tt>DistanceAlignment</tt> with a version more in line <li>Replace <tt>DistanceAlignment</tt> with a version more in line
with OntoSim (impl)</tt> with OntoSim (impl)</tt>
<!--li>Implemented transformations in EDOAL (edoal)</li-->
<li>Improve HTML interface layout and usability (server)</li> <li>Improve HTML interface layout and usability (server)</li>
<li>Implement metadata edition (server)</li> <li>Implement metadata edition (server)</li>
<li>Implement correspondence selection (server)</li> <li>Implement correspondence selection (server)</li>
...@@ -62,20 +61,25 @@ The development of 4 versions continue. ...@@ -62,20 +61,25 @@ The development of 4 versions continue.
<h2>Current SVN trunk version</h2> <h2>Current SVN trunk version</h2>
<!--h2>Version 4.2 (1xxx): xx/09/2009 - Zimt</h2--> <!--h2>Version 4.2 (1xxx): xx/09/2009 - Zimt</h2-->
<!--h2>Version 4.1 (1xxx): xx/09/2009 - Tring</h2--> <!--h2>Version 4.1 (15xx): xx/08/2010 - Tring</h2-->
<p><ul compact="1"> <p><ul compact="1">
<li>Integration of skoslite (home made SKOS API) (ontowrap)</li>
<li>Integration of SKOS API (ontowrap)</li> <li>Integration of SKOS API (ontowrap)</li>
<li>Extended ontowrap so that all methods can raise exceptions (ontowrap)</li> <li>Extended ontowrap so that all methods can raise exceptions (ontowrap)</li>
<li>Implement fully relaxed precision and recall (impl)</li>
<li>Added a <tt>getResult()</tt> method to <tt>Evaluator</tt> (api)</li> <li>Added a <tt>getResult()</tt> method to <tt>Evaluator</tt> (api)</li>
<li>Added a <tt>DiffAlign( al1, al2 )</tt> evaluator (impl) and interface (server)</li>
<li>Implemented online evaluation (server)</li> <li>Implemented online evaluation (server)</li>
<!--li>Implemented transformations in EDOAL (edoal)</li--> <li>Added the possibility to drop a number of correspondences in <tt>ONetworkWeakener</tt> (util)</li>
<li>Added a google chart api display of plots <tt>GenPlot -t html</tt> (util)</li>
<li><tt>edoal:or</tt>, <tt>edoal:and</tt> and <tt>edoal:compose</tt> <li><tt>edoal:or</tt>, <tt>edoal:and</tt> and <tt>edoal:compose</tt>
can be empty (edoal)</li> can be empty (edoal)</li>
<li>Upgraded to <span style="color: green">Pellet 2.1</span> (lib)</li> <li>Upgraded to <span style="color: green">Pellet 2.1</span> (lib)</li>
<li>Added <a href="tutorial/tutorial4/index.html">tutorial 4</a> Pellet action (tutorial)</li> <li>Added <a href="tutorial/tutorial4/index.html">tutorial 4</a> Pellet action (tutorial)</li>
<li>Added <a href="tutorial/tutorial5/index.html">tutorial 5</a> about exposing matchers as web services (tutorial)</li> <li>Added <a href="tutorial/tutorial5/index.html">tutorial 5</a> about exposing matchers as web services (tutorial)</li>
<li>Fixed path errors in tutorials (tutorial)</li> <li>Fixed path errors in tutorials (tutorial)</li>
<li>Corrected an error in matching when a alignment existed without method extension (server)</li>
<li>Improved RDF Rendering layout (impl)</li> <li>Improved RDF Rendering layout (impl)</li>
</ul></p> </ul></p>
......
This diff is collapsed.
...@@ -67,7 +67,7 @@ import gnu.getopt.Getopt; ...@@ -67,7 +67,7 @@ import gnu.getopt.Getopt;
where the options are: where the options are:
<pre> <pre>
-o filename --output=filename -o filename --output=filename
-f format = seo (symetric/effort-based/oriented) --format=seo -f format = sepr (symetric/effort-based/precision-oriented/recall-oriented) --format=sepr
-d debug --debug=level -d debug --debug=level
-r filename --reference=filename -r filename --reference=filename
-s algo/measure -s algo/measure
...@@ -287,7 +287,10 @@ public class ExtGroupEval { ...@@ -287,7 +287,10 @@ public class ExtGroupEval {
// variables for computing iterative harmonic means // variables for computing iterative harmonic means
int expected = 0; // expected so far int expected = 0; // expected so far
int foundVect[]; // found so far int foundVect[]; // found so far
double correctVect[]; // correct so far double symVect[]; // symmetric similarity
double effVect[]; // effort-based similarity
double precOrVect[]; // precision-oriented similarity
double recOrVect[]; // recall-oriented similarity
PrintStream writer = null; PrintStream writer = null;
fsize = format.length(); fsize = format.length();
...@@ -305,34 +308,42 @@ public class ExtGroupEval { ...@@ -305,34 +308,42 @@ public class ExtGroupEval {
writer.println("<colgroup align='center' />"); writer.println("<colgroup align='center' />");
// for each algo <td spancol='2'>name</td> // for each algo <td spancol='2'>name</td>
for ( String m : listAlgo ) { for ( String m : listAlgo ) {
writer.println("<colgroup align='center' span='"+fsize+"' />"); writer.println("<colgroup align='center' span='"+2*fsize+"' />");
} }
// For each file do a // For each file do a
writer.println("<thead valign='top'><tr><th>algo</th>"); writer.println("<thead valign='top'><tr><th>algo</th>");
// for each algo <td spancol='2'>name</td> // for each algo <td spancol='2'>name</td>
for ( String m : listAlgo ) { for ( String m : listAlgo ) {
writer.println("<th colspan='"+(fsize+1)+"'>"+m+"</th>"); writer.println("<th colspan='"+((2*fsize)+1)+"'>"+m+"</th>");
} }
writer.println("</tr></thead><tbody><tr><td>test</td>"); writer.println("</tr></thead><tbody><tr><td>test</td>");
// for each algo <td>Prec.</td><td>Rec.</td> // for each algo <td>Prec.</td><td>Rec.</td>
for ( String m : listAlgo ) { for ( String m : listAlgo ) {
for ( int i = 0; i < fsize; i++){ for ( int i = 0; i < fsize; i++){
if ( format.charAt(i) == 's' ) { if ( format.charAt(i) == 's' ) {
writer.println("<td colspan='2'>Symmetric</td>"); writer.println("<td colspan='2'><center>Symmetric</center></td>");
} else if ( format.charAt(i) == 'e' ) { } else if ( format.charAt(i) == 'e' ) {
writer.println("<td colspan='2'>Effort</td>"); writer.println("<td colspan='2'><center>Effort</center></td>");
} else if ( format.charAt(i) == 'o' ) { } else if ( format.charAt(i) == 'p' ) {
writer.println("<td colspan='2'>Oriente</td>"); writer.println("<td colspan='2'><center>Prec. orient.</center></td>");
} else if ( format.charAt(i) == 'r' ) {
writer.println("<td colspan='2'><center>Rec. orient.</center></td>");
} }
} }
//writer.println("<td>Prec.</td><td>Rec.</td>"); //writer.println("<td>Prec.</td><td>Rec.</td>");
} }
writer.println("</tr></tbody><tbody>"); writer.println("</tr></tbody><tbody>");
foundVect = new int[ listAlgo.size() ]; foundVect = new int[ listAlgo.size() ];
correctVect = new double[ listAlgo.size() ]; symVect = new double[ listAlgo.size() ];
effVect = new double[ listAlgo.size() ];
precOrVect = new double[ listAlgo.size() ];
recOrVect = new double[ listAlgo.size() ];
for( int k = listAlgo.size()-1; k >= 0; k-- ) { for( int k = listAlgo.size()-1; k >= 0; k-- ) {
foundVect[k] = 0; foundVect[k] = 0;
correctVect[k] = 0.; symVect[k] = 0.;
effVect[k] = 0.;
precOrVect[k] = 0.;
recOrVect[k] = 0.;
} }
// </tr> // </tr>
// For each directory <tr> // For each directory <tr>
...@@ -359,7 +370,6 @@ public class ExtGroupEval { ...@@ -359,7 +370,6 @@ public class ExtGroupEval {
nexpected = eval.getExpected(); nexpected = eval.getExpected();
expected += nexpected; expected += nexpected;
} }
// JE: Until the end of "//" for NEWSET
// If foundVect is -1 then results are invalid // If foundVect is -1 then results are invalid
if ( foundVect[k] != -1 ) foundVect[k] += eval.getFound(); if ( foundVect[k] != -1 ) foundVect[k] += eval.getFound();
for ( int i = 0 ; i < fsize; i++){ for ( int i = 0 ; i < fsize; i++){
...@@ -368,26 +378,27 @@ public class ExtGroupEval { ...@@ -368,26 +378,27 @@ public class ExtGroupEval {
formatter.format("%1.2f", eval.getSymPrecision()); formatter.format("%1.2f", eval.getSymPrecision());
System.out.print("</td><td>"); System.out.print("</td><td>");
formatter.format("%1.2f", eval.getSymRecall()); formatter.format("%1.2f", eval.getSymRecall());
// JE: Until the end of "//" for NEWSET symVect[k] += eval.getSymSimilarity();
correctVect[k] += eval.getFound() * eval.getSymPrecision();
} else if ( format.charAt(i) == 'e' ) { } else if ( format.charAt(i) == 'e' ) {
formatter.format("%1.2f", eval.getEffPrecision()); formatter.format("%1.2f", eval.getEffPrecision());
System.out.print("</td><td>"); System.out.print("</td><td>");
formatter.format("%1.2f", eval.getEffRecall()); formatter.format("%1.2f", eval.getEffRecall());
// JE: Until the end of "//" for NEWSET effVect[k] += eval.getEffSimilarity();
correctVect[k] += eval.getFound() * eval.getEffPrecision(); } else if ( format.charAt(i) == 'p' ) {
} else if ( format.charAt(i) == 'o' ) { formatter.format("%1.2f", eval.getPrecisionOrientedPrecision());
formatter.format("%1.2f", eval.getOrientPrecision());
System.out.print("</td><td>"); System.out.print("</td><td>");
formatter.format("%1.2f", eval.getOrientRecall()); formatter.format("%1.2f", eval.getPrecisionOrientedRecall());
// JE: Until the end of "//" for NEWSET precOrVect[k] += eval.getPrecisionOrientedSimilarity();
correctVect[k] += eval.getFound() * eval.getOrientPrecision(); } else if ( format.charAt(i) == 'r' ) {
formatter.format("%1.2f", eval.getRecallOrientedPrecision());
System.out.print("</td><td>");
formatter.format("%1.2f", eval.getRecallOrientedRecall());
recOrVect[k] += eval.getRecallOrientedSimilarity();
} }
writer.println("</td>"); writer.println("</td>");
} }
} else { } else {
writer.println("<td>n/a</td><td>n/a</td>"); writer.println("<td>n/a</td><td>n/a</td>");
//foundVect[k] = -1;
} }
} }
writer.println("</tr>"); writer.println("</tr>");
...@@ -396,14 +407,27 @@ public class ExtGroupEval { ...@@ -396,14 +407,27 @@ public class ExtGroupEval {
int k = 0; int k = 0;
for ( String m : listAlgo ) { for ( String m : listAlgo ) {
if ( foundVect[k] != -1 ){ if ( foundVect[k] != -1 ){
double precision = correctVect[k]/foundVect[k]; for ( int i = 0 ; i < fsize; i++){
double recall = correctVect[k]/expected;
//for ( int i = 0 ; i < fsize; i++){
writer.print("<td>"); writer.print("<td>");
formatter.format("%1.2f", precision); if ( format.charAt(i) == 's' ) {
System.out.print("</td><td>"); formatter.format("%1.2f", symVect[k]/foundVect[k]);
formatter.format("%1.2f", recall); System.out.print("</td><td>");
formatter.format("%1.2f", symVect[k]/expected);
} else if ( format.charAt(i) == 'e' ) {
formatter.format("%1.2f", effVect[k]/foundVect[k]);
System.out.print("</td><td>");
formatter.format("%1.2f", effVect[k]/expected);
} else if ( format.charAt(i) == 'p' ) {
formatter.format("%1.2f", precOrVect[k]/foundVect[k]);
System.out.print("</td><td>");
formatter.format("%1.2f", precOrVect[k]/expected);
} else if ( format.charAt(i) == 'r' ) {
formatter.format("%1.2f", recOrVect[k]/foundVect[k]);
System.out.print("</td><td>");
formatter.format("%1.2f", recOrVect[k]/expected);
}
writer.println("</td>"); writer.println("</td>");
}
} else { } else {
writer.println("<td colspan='2'><center>Error</center></td>"); writer.println("<td colspan='2'><center>Error</center></td>");
} }
...@@ -422,7 +446,7 @@ public class ExtGroupEval { ...@@ -422,7 +446,7 @@ public class ExtGroupEval {
public void usage() { public void usage() {
System.out.println("usage: ExtGroupEval [options]"); System.out.println("usage: ExtGroupEval [options]");
System.out.println("options are:"); System.out.println("options are:");
System.out.println("\t--format=seo -r seo\tSpecifies the extended measure used (symetric/effort-based/oriented)"); System.out.println("\t--format=sepr -r sepr\tSpecifies the extended measures used (symetric/effort-based/precision-oriented/recall-oriented)");
System.out.println("\t--reference=filename -r filename\tSpecifies the name of the reference alignment file (default: refalign.rdf)"); System.out.println("\t--reference=filename -r filename\tSpecifies the name of the reference alignment file (default: refalign.rdf)");
System.out.println("\t--dominant=algo -s algo\tSpecifies if dominant columns are algorithms or measure"); System.out.println("\t--dominant=algo -s algo\tSpecifies if dominant columns are algorithms or measure");
System.out.println("\t--type=html|xml|tex|ascii -t html|xml|tex|ascii\tSpecifies the output format"); System.out.println("\t--type=html|xml|tex|ascii -t html|xml|tex|ascii\tSpecifies the output format");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment