!7

lib 1008485 // stanford parser
lib 1008486 // english model

import edu.stanford.nlp.ling.CoreLabel;
import edu.stanford.nlp.process.TokenizerFactory;
import edu.stanford.nlp.parser.lexparser.LexicalizedParser;
import edu.stanford.nlp.process.CoreLabelTokenFactory;
import edu.stanford.nlp.process.PTBTokenizer;
import edu.stanford.nlp.process.Tokenizer;
import edu.stanford.nlp.trees.Tree;

sS PCG_MODEL = "edu/stanford/nlp/models/lexparser/englishPCFG.ser.gz";
static TokenizerFactory<CoreLabel> tokenizerFactory;
static LexicalizedParser parser;

static Tree parse(S str) {
  List<CoreLabel> tokens = tokenize(str);
  ret parser.apply(tokens);
}

static L<CoreLabel> tokenize(String str) {
  Tokenizer<CoreLabel> tokenizer = tokenizerFactory.getTokenizer(
    new StringReader(str));
  ret tokenizer.tokenize();
}

p {
  tokenizerFactory = PTBTokenizer.factory(new CoreLabelTokenFactory(), "invertible=true");
  parser = LexicalizedParser.loadModel(PCG_MODEL);
  S str = "My dog also likes eating sausage.";
  Tree tree = parse(str);

  L<Tree> leaves = tree.getLeaves();
  // Print words and Pos Tags
  for (Tree leaf : leaves) {
    Tree parent = leaf.parent(tree);
    print("  " + leaf.label().value() + " [" + parent.label().value() + "]");
  }
  print();
  printTree(tree);
}

svoid printTree(Tree tree) {
  printTree("", tree);
}

svoid printTree(S indent, Tree tree) {
  //if (l(indent) > 4) ret;
  print(indent + tree.label().value());
  for (Tree child : tree.getChildrenAsList())
    printTree(indent + "  ", child);
}