package optimizer; /** * * @author Mojtaba Khallash */ public class GuidesGenerator { public static String generateGuides(String feature) { int ind = feature.lastIndexOf(".xml"); if (ind != -1) { feature = feature.substring(0, ind); } switch (feature) { case "NivreEager": return generateNivreEager(); case "NivreStandard": return generateNivreStandard(); case "StackProjective": return generateStackProjective(); case "StackSwap": return generateStackSwap(); case "CovingtonProjective": return generateCovingtonProjective(); case "CovingtonNonProjective": return generateCovingtonNonProjective(); } return ""; } private static String generateNivreEager() { StringBuilder guide = new StringBuilder(); guide.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); guide.append("<featuremodels>\n"); guide.append("\t<featuremodel name=\"nivreeager\">\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Input[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Input[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Input[2])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Input[3])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[1])</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Input[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[1]), InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Input[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Input[0]), InputColumn(POSTAG, Input[1]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Input[0]), InputColumn(POSTAG, Input[1]), InputColumn(POSTAG, Input[2]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Input[1]), InputColumn(POSTAG, Input[2]), InputColumn(POSTAG, Input[3]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, Stack[0])</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Stack[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, rdep(Stack[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Input[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[0]), OutputColumn(DEPREL, ldep(Stack[0])), OutputColumn(DEPREL, rdep(Stack[0])))</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Stack[0]), OutputColumn(DEPREL, Stack[0]))</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Input[0]), OutputColumn(DEPREL, ldep(Input[0])))</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Stack[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Input[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Input[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, head(Stack[0]))</feature>\n"); guide.append("\t</featuremodel>\n"); guide.append("</featuremodels>\n"); return guide.toString(); } private static String generateNivreStandard() { StringBuilder guide = new StringBuilder(); guide.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); guide.append("\t<featuremodels>\n"); guide.append("\t\t<featuremodel name=\"nivrestandard\">\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Input[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Input[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Input[2])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Input[3])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[1])</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Input[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[1]), InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Input[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Input[0]), InputColumn(POSTAG, Input[1]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Input[0]), InputColumn(POSTAG, Input[1]), InputColumn(POSTAG, Input[2]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Input[1]), InputColumn(POSTAG, Input[2]), InputColumn(POSTAG, Input[3]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Stack[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, rdep(Stack[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Input[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, rdep(Input[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[0]), OutputColumn(DEPREL, ldep(Stack[0])), OutputColumn(DEPREL, rdep(Stack[0])))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Input[0]), OutputColumn(DEPREL, ldep(Input[0])), OutputColumn(DEPREL, rdep(Input[0])))</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Stack[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Input[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Input[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, head(Stack[0]))</feature>\n"); guide.append("\t</featuremodel>\n"); guide.append("</featuremodels>\n"); return guide.toString(); } private static String generateStackProjective() { StringBuilder guide = new StringBuilder(); guide.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); guide.append("\t<featuremodels>\n"); guide.append("\t\t<featuremodel name=\"stackprojective\">\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[2])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Lookahead[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Lookahead[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Lookahead[2])</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Stack[1]), InputColumn(POSTAG, Stack[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[2]), InputColumn(POSTAG, Stack[1]), InputColumn(POSTAG, Stack[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[1]), InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Lookahead[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Lookahead[0]), InputColumn(POSTAG, Lookahead[1]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Lookahead[0]), InputColumn(POSTAG, Lookahead[1]), InputColumn(POSTAG, Lookahead[2]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Stack[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, rdep(Stack[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Stack[1]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, rdep(Stack[1]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[0]), OutputColumn(DEPREL, ldep(Stack[0])), OutputColumn(DEPREL, rdep(Stack[0])))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[1]), OutputColumn(DEPREL, ldep(Stack[1])), OutputColumn(DEPREL, rdep(Stack[1])))</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Stack[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Stack[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Lookahead[0])</feature>\n"); guide.append("\t</featuremodel>\n"); guide.append("</featuremodels>\n"); return guide.toString(); } private static String generateStackSwap() { StringBuilder guide = new StringBuilder(); guide.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); guide.append("\t<featuremodels>\n"); guide.append("\t\t<featuremodel name=\"stackswap\">\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Stack[2])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Input[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Lookahead[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Lookahead[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Lookahead[2])</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Stack[1]), InputColumn(POSTAG, Stack[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[2]), InputColumn(POSTAG, Stack[1]), InputColumn(POSTAG, Stack[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[1]), InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Lookahead[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[0]), InputColumn(POSTAG, Lookahead[0]), InputColumn(POSTAG, Lookahead[1]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Lookahead[0]), InputColumn(POSTAG, Lookahead[1]), InputColumn(POSTAG, Lookahead[2]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Stack[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, rdep(Stack[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Stack[1]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, rdep(Stack[1]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[0]), OutputColumn(DEPREL, ldep(Stack[0])), OutputColumn(DEPREL, rdep(Stack[0])))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Stack[1]), OutputColumn(DEPREL, ldep(Stack[1])), OutputColumn(DEPREL, rdep(Stack[1])))</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Stack[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Stack[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Lookahead[0])</feature>\n"); guide.append("\t</featuremodel>\n"); guide.append("</featuremodels>\n"); return guide.toString(); } private static String generateCovingtonProjective() { StringBuilder guide = new StringBuilder(); guide.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); guide.append("\t<featuremodels>\n"); guide.append("\t\t<featuremodel name=\"covnonproj\">\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Left[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Right[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Right[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Right[2])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Right[3])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Left[1])</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Left[0]), InputColumn(POSTAG, Right[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Left[1]), InputColumn(POSTAG, Left[0]), InputColumn(POSTAG, Right[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Left[0]), InputColumn(POSTAG, Right[0]), InputColumn(POSTAG, Right[1]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Right[0]), InputColumn(POSTAG, Right[1]), InputColumn(POSTAG, Right[2]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Right[1]), InputColumn(POSTAG, Right[2]), InputColumn(POSTAG, Right[3]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, Left[0])</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Left[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, rdep(Left[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Right[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Left[0]), OutputColumn(DEPREL, ldep(Left[0])), OutputColumn(DEPREL, rdep(Left[0])))</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Left[0]), OutputColumn(DEPREL, Left[0]))</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Right[0]), OutputColumn(DEPREL, ldep(Right[0])))</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Left[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Right[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Right[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, head(Left[0]))</feature>\n"); guide.append("\t</featuremodel>\n"); guide.append("</featuremodels>\n"); return guide.toString(); } private static String generateCovingtonNonProjective() { StringBuilder guide = new StringBuilder(); guide.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"); guide.append("\t<featuremodels>\n"); guide.append("\t\t<featuremodel name=\"covnonproj\">\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Left[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Right[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Right[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Right[2])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Right[3])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, Left[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, LeftContext[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(POSTAG, RightContext[0])</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Left[0]), InputColumn(POSTAG, Right[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Left[1]), InputColumn(POSTAG, Left[0]), InputColumn(POSTAG, Right[0]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Left[0]), InputColumn(POSTAG, Right[0]), InputColumn(POSTAG, Right[1]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Right[0]), InputColumn(POSTAG, Right[1]), InputColumn(POSTAG, Right[2]))</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Right[1]), InputColumn(POSTAG, Right[2]), InputColumn(POSTAG, Right[3]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, Left[0])</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Left[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, rdep(Left[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, ldep(Right[0]))</feature>\n"); guide.append("\t\t<feature>OutputColumn(DEPREL, Right[0])</feature>\n"); guide.append("\t\t<feature>Merge3(InputColumn(POSTAG, Left[0]), OutputColumn(DEPREL, ldep(Left[0])), OutputColumn(DEPREL, rdep(Left[0])))</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Left[0]), OutputColumn(DEPREL, Left[0]))</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Right[0]), OutputColumn(DEPREL, ldep(Right[0])))</feature>\n"); guide.append("\t\t<feature>Merge(InputColumn(POSTAG, Right[0]), OutputColumn(DEPREL, Right[0]))</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Left[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Right[0])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, Right[1])</feature>\n"); guide.append("\t\t<feature>InputColumn(FORM, head(Left[0]))</feature>\n"); guide.append("\t</featuremodel>\n"); guide.append("</featuremodels>\n"); return guide.toString(); } }