/*
* Created on Feb 1, 2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.mindswap.swoop.automation;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.Vector;
/**
* @author Dave Wang
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class DataExtractor
{
public static final String TAB = "\t";
public static final String EQUALS = "=";
public static final String GREATERTHAN = ">";
public static final String LESSTHAN = ">";
public static final String NOTEQUALS = "!=";
private BufferedReader myReader = null;
private Vector myTable = null;
public DataExtractor( String ontoStats )
{
try
{
myReader = new BufferedReader( new FileReader( ontoStats ) );
myTable = new Vector();
String line = myReader.readLine();
while ( ( line = myReader.readLine() ) != null )
{
StringTokenizer tokens = new StringTokenizer( line, TAB, true );
Vector segmentedLine = new Vector();
boolean isLastTokTab = false;
/* parse each line and put each cell between tabs.
* each empty cell is represented as ""
*/
while ( tokens.hasMoreTokens() )
{
String tok = tokens.nextToken();
if (( isLastTokTab == true ) && ( tok.equals(TAB)))
segmentedLine.add("");
if ( tok.equals( TAB ))
{
isLastTokTab = true;
continue;
}
else
isLastTokTab = false;
segmentedLine.add( tok );
}
myTable.add( segmentedLine );
}
myReader.close();
}
catch ( Exception e )
{ e.printStackTrace(); }
}
/*
* colNum starts with 0
*/
public void writeHistogramTo( int colNum, String outputfile )
{
try
{
Hashtable thisTable = new Hashtable();
for ( int i = 0; i < myTable.size(); i++ )
{
Vector lineData = (Vector)myTable.elementAt( i );
String data = "";
if ( lineData.size() >= colNum + 1 )
data = (String)lineData.elementAt( colNum );
if ( thisTable.keySet().contains( data ) )
{
Integer integer = (Integer)thisTable.get( data );
integer = new Integer( integer.intValue() + 1 );
thisTable.put( data, integer );
}
else
thisTable.put( data, new Integer(1) );
}
BufferedWriter writer = new BufferedWriter( new FileWriter( outputfile) );
Set keys = thisTable.keySet();
for ( Iterator it = keys.iterator(); it.hasNext(); )
{
String key = (String)it.next();
writer.write( key + "\t" + thisTable.get( key ) );
writer.newLine();
}
writer.flush();
writer.close();
}
catch ( Exception e )
{ e.printStackTrace(); }
}
/*
* colNum starts with 0
*/
public void writeHistogramWithConstraintsTo( int [] cols, String [] values, int colNum, String outputfile )
{
try
{
Hashtable thisTable = new Hashtable();
for ( int i = 0; i < myTable.size(); i++ )
{
Vector lineData = (Vector)myTable.elementAt( i );
String data = "";
boolean satisfiesConstraints = true;
// checking if lineData.elementAt(j) equals the values in cols[j]
for ( int j = 0; j < cols.length; j++ )
{
int index = cols[j];
String val = values[j];
if ( lineData.size() < index + 1 )
{
satisfiesConstraints = false;
break;
}
data = (String)lineData.elementAt( index );
if ( !data.equals( val ) )
{
satisfiesConstraints = false;
break;
}
}
if ( satisfiesConstraints )
{
data = "";
if ( lineData.size() >= colNum + 1 )
data = (String)lineData.elementAt( colNum );
if ( thisTable.keySet().contains( data ) )
{
Integer integer = (Integer)thisTable.get( data );
integer = new Integer( integer.intValue() + 1 );
thisTable.put( data, integer );
}
else
thisTable.put( data, new Integer(1) );
}
}
BufferedWriter writer = new BufferedWriter( new FileWriter( outputfile) );
Set keys = thisTable.keySet();
for ( Iterator it = keys.iterator(); it.hasNext(); )
{
String key = (String)it.next();
writer.write( key + "\t" + thisTable.get( key ) );
writer.newLine();
}
writer.flush();
writer.close();
}
catch ( Exception e )
{ e.printStackTrace(); }
}
public void writeListWithCriteria( int cols[], String values[], String rel[], String outputfile )
{
try
{
Vector myMatchingOntologyURIs = new Vector();
for ( int i = 0; i < myTable.size(); i++ )
{
Vector lineData = (Vector)myTable.elementAt( i );
String data = "";
boolean satisfiesConstraints = true;
for ( int j = 0; j < cols.length; j++ )
{
int index = cols[j];
String val = values[j]; // target value
if ( lineData.size() < index + 1 )
{
satisfiesConstraints = false;
break;
}
try
{
data = (String)lineData.elementAt( index );
if ( rel[j].equals( EQUALS ) )
{
if ( !data.equals( val ) )
{
satisfiesConstraints = false;
break;
}
}
else if ( rel[j].equals( NOTEQUALS ) )
{
if ( data.equals( val ) )
{
satisfiesConstraints = false;
break;
}
}
else if ( rel[j].equals( GREATERTHAN ) )
{
if (data.trim().equals(""))
{
satisfiesConstraints = false;
break;
}
double data_val = Double.parseDouble( data );
double target_value = Double.parseDouble( val );
if ( !( data_val > target_value ) )
{
satisfiesConstraints = false;
break;
}
}
else
{
double data_val = Double.parseDouble( data );
double target_value = Double.parseDouble( val );
if ( !( data_val < target_value ) )
{
satisfiesConstraints = false;
break;
}
}
}
catch ( NumberFormatException e )
{
e.printStackTrace();
satisfiesConstraints = false;
break;
}
}
if ( satisfiesConstraints )
{
data = (String)lineData.elementAt( 1 ); // reading physical uri of ontology
myMatchingOntologyURIs.add( data );
}
}
BufferedWriter writer = new BufferedWriter( new FileWriter( outputfile) );
for ( Iterator it = myMatchingOntologyURIs.iterator(); it.hasNext(); )
{
String uri = (String)it.next();
writer.write( uri );
writer.newLine();
}
writer.flush();
writer.close();
}
catch ( Exception e )
{ e.printStackTrace(); }
}
public void writeAllColumnsWithCriteria( int cols[], String values[], String rel[], String outputfile )
{
try
{
Vector myMatchingData = new Vector();
for ( int i = 0; i < myTable.size(); i++ )
{
Vector lineData = (Vector)myTable.elementAt( i );
String data = "";
boolean satisfiesConstraints = true;
for ( int j = 0; j < cols.length; j++ )
{
int index = cols[j];
String val = values[j]; // target value
if ( lineData.size() < index + 1 )
{
satisfiesConstraints = false;
break;
}
try
{
data = (String)lineData.elementAt( index );
if ( rel[j].equals( EQUALS ) )
{
if ( !data.equals( val ) )
{
satisfiesConstraints = false;
break;
}
}
else if ( rel[j].equals( NOTEQUALS ) )
{
if ( data.equals( val ) )
{
satisfiesConstraints = false;
break;
}
}
else if ( rel[j].equals( GREATERTHAN ) )
{
double data_val = Double.parseDouble( data );
double target_value = Double.parseDouble( val );
if ( !( data_val > target_value ) )
{
satisfiesConstraints = false;
break;
}
}
else
{
double data_val = Double.parseDouble( data );
double target_value = Double.parseDouble( val );
if ( !( data_val < target_value ) )
{
satisfiesConstraints = false;
break;
}
}
}
catch ( NumberFormatException e )
{
e.printStackTrace();
satisfiesConstraints = false;
break;
}
}
if ( satisfiesConstraints )
{
myMatchingData.add( lineData );
}
}
BufferedWriter writer = new BufferedWriter( new FileWriter( outputfile) );
for ( Iterator it = myMatchingData.iterator(); it.hasNext(); )
{
Vector data = (Vector)it.next();
for ( Iterator iter = data.iterator(); iter.hasNext(); )
{
writer.write( (String)iter.next() );
if ( iter.hasNext() )
writer.write( "\t");
}
writer.newLine();
}
writer.flush();
writer.close();
}
catch ( Exception e )
{ e.printStackTrace(); }
}
public void writeColumnsTo( int cols[], String filename )
{
try
{
BufferedWriter writer = new BufferedWriter( new FileWriter( filename) );
for ( int i = 0; i < myTable.size(); i++ )
{
Vector lineData = (Vector)myTable.elementAt(i);
for ( int j = 0; j < cols.length; j++ )
{
if ( lineData.size() <= cols[j] )
{
writer.write( " " + "\t" );
continue;
}
writer.write( lineData.elementAt( cols[j] ) + "\t" );
}
writer.newLine();
}
writer.flush();
writer.close();
}
catch ( Exception e )
{ e.printStackTrace(); }
}
public static void main( String [] args )
{
System.out.print("Starting... ");
//DataExtractor de = new DataExtractor("test.txt");
DataExtractor de = new DataExtractor("OWL-only-rightCount.txt");
/*
de.writeHistogramTo( 22, "toldExpressHist.txt" );
de.writeHistogramTo( 39, "reasonedExpressHist.txt" );
de.writeHistogramTo( 38, "toldGMHist.txt");
de.writeHistogramTo( 55, "reasonedGMHist.txt");
int [] indices1 = { 40 };
String [] values1 = { "0"};
String [] rel1 = { DataExtractor.GREATERTHAN };
de.writeListWithCriteria( indices1, values1, rel1, "OntsWithUC.txt");
int [] indices2 = { 32 };
String [] values2 = { "0" };
String [] rel2 = { DataExtractor.GREATERTHAN };
de.writeListWithCriteria( indices2, values2, rel2, "OntsWithPropDepth.txt");
de.writeHistogramTo( 32, "PropertyDepthHist.txt");
*/
//int [] cols = { 1, 22 };
//de.writeColumnsTo( cols, "SwoopExpressivity.txt" );
int [] cols = { 40 };
String [] vals = { "0.0" };
String [] rels = { DataExtractor.GREATERTHAN};
//de.writeColumnsTo( cols, "expressivity.txt");
de.writeListWithCriteria( cols, vals, rels, "Unsat.txt");
//de.writeHistogramTo( 39, "pelletExpressHist.txt" );
System.out.println("done");
}
}