ResultMerger.java :  » Media » tweet-detector » com » hrstc » trec » Java Open Source

Java Open Source » Media » tweet detector 
tweet detector » com » hrstc » trec » ResultMerger.java
package com.hrstc.trec;

import java.io.*;
import java.util.*;

import com.hrstc.utils.*;

/**
 * ResultMerger.java
 *
 * Created on January 9, 2005, 11:34 AM
 *
 * Merges results from two files; one by one; 
 * Files must have equal number of docs / query
 *
 * @author  Neil O. Rouben
 */
public class ResultMerger
{
    
    BufferedReader reader1;
    BufferedReader reader2;    
    BufferedWriter writer;
    String formatIn1;
    String formatIn2;
    String formatOut;
    
    /** Creates a new instance of ResultMerger */
    public ResultMerger( String[] args ) throws IOException
    {
        reader1 = new BufferedReader( new FileReader( args[0] ) );
        reader2 = new BufferedReader( new FileReader( args[1] ) );        
        writer = new BufferedWriter( new FileWriter( args[2] ) );
        // 302 Q0 FBIS4-30637 1 0.208113185175 FIS
        formatIn1 = Defs.QUERY_ID + " iter " + Defs.DOCUMENT_NUMBER;
        // 302 Q0 FBIS4-67720 1 0.38902417 0.0 0.83408016  0.09578263 1.0  0.0 0.35804617  0 0 0.33333334
        formatIn2 = Defs.QUERY_ID + " iter " + Defs.DOCUMENT_NUMBER;
        // 302 Q0 FBIS4-30637 1 0.208113185175 FIS        
        formatOut = Defs.QUERY_ID + " iter " + Defs.DOCUMENT_NUMBER + " " + Defs.RANK + " " + Defs.SCORE + " " + Defs.RUN_ID;
    }
    
    public void process() throws IOException
    {
        Hashtable qHash = new Hashtable();
        int rank = 1;
        float score = 1;
        String qIdPrevious = "";
        String qIdCurrent;
        
        while ( reader1.ready() && reader2.ready() )
        {
            String line1 = reader1.readLine();
            String line2 = reader2.readLine();
            Hashtable docHash1 = StringUtils.stringToHashtable( line1, formatIn1 );
            Hashtable docHash2 = StringUtils.stringToHashtable( line2, formatIn2 );
            qIdCurrent = (String) docHash1.get( Defs.QUERY_ID );
            // If next query reset counters
            if ( !qIdCurrent.equals( qIdPrevious ) )
            {
                qHash = new Hashtable();
                rank = 1;
                score = 1;
            }
            // Output results
            // If not already written -> write it
            String docId1 = (String) docHash1.get( Defs.DOCUMENT_NUMBER );
            String docId2 = (String) docHash2.get( Defs.DOCUMENT_NUMBER );            
            if ( !qHash.containsKey( docId1 ) )
            {
                qHash.put( docId1,  docId1 );
                docHash1.put( Defs.RANK, String.valueOf( rank ) );
                rank++;
                docHash1.put( Defs.SCORE, String.valueOf( score ) );
                score -= 0.0001;
                String out = HashtableUtils.hashtableToString( docHash1, formatOut );
                writer.write( out + "\n" );
            }
            if ( !qHash.containsKey( docId2 ) )
            {
                qHash.put( docId2,  docId2 );
                docHash2.put( Defs.RANK, String.valueOf( rank ) );
                rank++;
                docHash2.put( Defs.SCORE, String.valueOf( score ) );
                score -= 0.0001;
                String out = HashtableUtils.hashtableToString( docHash2, formatOut );
                writer.write( out + "\n" );
            }            
            
            qIdPrevious = qIdCurrent;
        }
        
        reader1.close();
        reader2.close();
        writer.close();
    }
    
    
    /**
     * @param args the command line arguments
     * 0 - file1 in
     * 1 - file2 in
     * 2 - file out
     */
    public static void main(String[] args) throws IOException
    {
        ResultMerger merger = new ResultMerger( args );
        merger.process();
        // TODO code application logic here
    }
    
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.