package edu.berkeley.nlp.PCFGLA;
import java.util.Map;
import edu.berkeley.nlp.PCFGLA.smoothing.SmoothAcrossParentBits;
import edu.berkeley.nlp.PCFGLA.smoothing.Smoother;
import edu.berkeley.nlp.util.CommandLineUtils;
public class GrammarSmoother {
/**
* @param args
*/
public static void main(String[] args) {
if (args.length < 1) {
System.out.println("usage: java GrammarSmoother \n" +
"\t\t -i Input File for Grammar (Required)\n" +
"\t\t -o Output File for Smoothed Grammar (Required)\n"+
"\t\t -smooth Type of grammar smoothing used. This takes the maximum likelihood rule\n" +
" probabilities and smooths them with each other. Current options are\n" +
" 'NoSmoothing', 'SmoothAcrossParentSubstate', and 'SmoothAcrossParentBits'.\n" +
"\t\t -grsm Grammar smoothing parameter, in range [0,1]. (Default: 0.1)\n"
);
System.exit(2);
}
// provide feedback on command-line arguments
System.out.print("Running with arguments: ");
for (String arg : args) {
System.out.print(" '"+arg+"'");
}
System.out.println("");
// parse the input arguments
Map<String, String> input = CommandLineUtils.simpleCommandLineParser(args);
String outFileName = CommandLineUtils.getValueOrUseDefault(input, "-o", null);
String inFileName = CommandLineUtils.getValueOrUseDefault(input, "-i", null);
System.out.println("Loading grammar from " + inFileName + ".");
ParserData pData = ParserData.Load(inFileName);
if (pData == null) {
System.out.println("Failed to load grammar from file" + inFileName + ".");
System.exit(1);
}
Grammar gr = pData.getGrammar();
// double grammarSmoothing = Double.parseDouble(CommandLineUtils.getValueOrUseDefault(input, "-grsm","0.1"));
// String smootherStr = CommandLineUtils.getValueOrUseDefault(input, "-smooth", "NoSmoothing");
Smoother grSmoother = new SmoothAcrossParentBits(0.01,gr.splitTrees);
Smoother lexSmoother = new SmoothAcrossParentBits(0.1,gr.splitTrees);
gr.setSmoother(grSmoother);
//gr.smooth();
pData.gr=gr;
Lexicon lex = pData.getLexicon();
lex.setSmoother(lexSmoother);
pData.lex = lex;
if (pData.Save(outFileName)) System.out.println("Saving successful.");
else System.out.println("Saving failed!");
System.exit(0);
}
}