/**
*
*/
package edu.berkeley.nlp.PCFGLA;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import edu.berkeley.nlp.util.Numberer;
/**
* @author petrov
*
*/
public class WriteGrammarToTextFile {
/**
* @param args
*/
public static void main(String[] args) {
if (args.length<2) {
System.out.println(
"usage: java -cp berkeleyParser.jar edu/berkeley/nlp/parser/WriteGrammarToTextFile <grammar> <output file name> [<threshold>] \n " +
"reads in a serialized grammar file and writes it to a text file."
);
System.exit(2);
}
String inFileName = args[0];
String outName = args[1];
System.out.println("Loading grammar from file "+inFileName+".");
ParserData pData = ParserData.Load(inFileName);
if (pData == null) {
System.out.println("Failed to load grammar from file" + inFileName + ".");
System.exit(1);
}
Grammar grammar = pData.getGrammar();
// if (grammar instanceof HierarchicalGrammar)
// grammar = (HierarchicalGrammar)grammar;
Lexicon lexicon = pData.getLexicon();
Numberer.setNumberers(pData.getNumbs());
Numberer tagNumberer = Numberer.getGlobalNumberer("tags");
grammar.splitRules();
SpanPredictor spanPredictor = pData.getSpanPredictor();
if (args.length>2){
double filter = Double.parseDouble(args[2]);
grammar.removeUnlikelyRules(filter,1.0);
lexicon.removeUnlikelyTags(filter,1.0);
}
System.out.println("Writing output to files "+outName+".xxx");
Writer output = null;
try {
output = new BufferedWriter(new FileWriter(outName+".grammar"));
//output.write(grammar.toString());
grammar.writeData(output);
if (output != null) output.close();
output = new BufferedWriter(new FileWriter(outName+".splits"));
//output.write(grammar.toString());
grammar.writeSplitTrees(output);
if (output != null) output.close();
output = new BufferedWriter(new FileWriter(outName+".lexicon"));
output.write(lexicon.toString());
if (output != null) output.close();
output = new BufferedWriter(new FileWriter(outName+".words"));
for (String word : ((SophisticatedLexicon)lexicon).wordCounter.keySet())
output.write(word + "\n");
if (output != null) output.close();
if (spanPredictor!=null){
SimpleLexicon lex = (SimpleLexicon)lexicon;
output = new BufferedWriter(new FileWriter(outName+".span"));
output.write(spanPredictor.toString(lex.wordIndexer));
if (output != null) output.close();
}
} catch (IOException ex) { ex.printStackTrace();}
}
}