package joshua.discriminative.bleu_approximater;
import java.io.IOException;
import java.util.List;
import java.util.logging.Logger;
import joshua.decoder.JoshuaDecoder;
import joshua.util.FileUtility;
public class OracleDecoderForZmert {
private static final Logger logger =
Logger.getLogger(OracleDecoderForZmert.class.getName());
public static void main(String[] args) throws IOException {
if (args.length != 4) {
System.out.println("Usage: java " +
JoshuaDecoder.class.getName() +
" configFile testFile outputFile trueConfigTemplate");
System.out.println("num of args is " + args.length);
for (int i = 0; i < args.length; i++) {
System.out.println("arg is: " + args[i]);
}
System.exit(1);
}
logger.finest("Starting decoder");
String joshuaConfigForZmert = args[0].trim();//joshua config for zmert
String testFile = args[1].trim();
String nbestFile = args[2].trim();
String joshuaConfigTempalte = args[3].trim();//joshua config for decoder
String[] refFiles = ConfigFileConverter.getReferenceFileNames(joshuaConfigTempalte);
logger.info("reffiles are: " + refFiles);
String trueJoshuaConfigFile = joshuaConfigTempalte + ".true";
//============== convert config file
ConfigFileConverter.convertMertToJoshuaFormat(joshuaConfigForZmert, joshuaConfigTempalte, trueJoshuaConfigFile);
//============== generate nbest by joshua decoder
logger.info("joshua decoding using " + trueJoshuaConfigFile);
JoshuaDecoder decoder = new JoshuaDecoder(trueJoshuaConfigFile);
String nbestTemFile = nbestFile + ".tem";
decoder.decodeTestSet(testFile, nbestTemFile, null);
decoder.cleanUp();
//============== convert nbest to mert format
List<Double> googleWeights = ConfigFileConverter.readGoogleWeightsFromJoshuaConfig(trueJoshuaConfigFile);
LinearCorpusGainRecover recover = new LinearCorpusGainRecover(googleWeights);
recover.processWholeSet(nbestTemFile, nbestFile, refFiles);
FileUtility.deleteFile(nbestTemFile);
}
}