package joshua.discriminative.variational_decoder.nbest; import java.io.BufferedWriter; import java.io.IOException; import java.util.List; import joshua.corpus.vocab.BuildinSymbol; import joshua.corpus.vocab.SymbolTable; import joshua.decoder.NbestMinRiskReranker; import joshua.decoder.hypergraph.DiskHyperGraph; import joshua.decoder.hypergraph.HyperGraph; import joshua.discriminative.FileUtilityOld; public class NbestCrunchingThenMBR { public static void main(String[] args) throws InterruptedException, IOException { if(args.length!=6){ System.out.println("Wrong number of parameters, it must be 5"); System.exit(1); } //long start_time = System.currentTimeMillis(); String testItemsFile=args[0].trim(); String testRulesFile=args[1].trim(); int numSents=new Integer(args[2].trim()); String onebestFile=args[3].trim();//output int topN = new Integer(args[4].trim()); double scalingFactor = new Double(args[5].trim()); int ngramStateID = 0; SymbolTable symbolTbl = new BuildinSymbol(null);; NbestCrunching cruncher = new NbestCrunching(symbolTbl, scalingFactor, topN); NbestMinRiskReranker mbrReranker = new NbestMinRiskReranker(false, 1.0); BufferedWriter onebestWriter = FileUtilityOld.getWriteFileStream(onebestFile); System.out.println("############Process file " + testItemsFile); DiskHyperGraph diskHG = new DiskHyperGraph(symbolTbl, ngramStateID, true, null); //have model costs stored diskHG.initRead(testItemsFile, testRulesFile,null); for(int sentID=0; sentID < numSents; sentID ++){ System.out.println("#Process sentence " + sentID); HyperGraph testHG = diskHG.readHyperGraph(); List<String> nbest = cruncher.processOneSent(testHG, sentID, true);//produce the disorder nbest String bestHyp = mbrReranker.processOneSent(nbest, sentID);//nbest: list of unique strings FileUtilityOld.writeLzf(onebestWriter, bestHyp + "\n"); } FileUtilityOld.closeWriteFile(onebestWriter); } }