private static double testParser(Parser parser, List<Tree<String>> testTrees) {
    EnglishPennTreebankParseEvaluator.LabeledConstituentEval<String> eval =
        new EnglishPennTreebankParseEvaluator.LabeledConstituentEval<String>(
            Collections.singleton("ROOT"),
            new HashSet<String>(Arrays.asList(new String[] {"''", "``", ".", ":", ","})));
    for (Tree<String> testTree : testTrees) {
      List<String> testSentence = testTree.getYield();

      if (testSentence.size() > MAX_LENGTH) continue;
      Tree<String> guessedTree = parser.getBestParse(testSentence);
      System.out.println("Guess:\n" + Trees.PennTreeRenderer.render(guessedTree));
      System.out.println("Gold:\n" + Trees.PennTreeRenderer.render(testTree));
      eval.evaluate(guessedTree, testTree);
    }
    System.out.println();
    return eval.display(true);
  }
 private Tree<String> buildTagTree(List<String> words, List<String> tags, int currentPosition) {
   Tree<String> leafTree = new Tree<String>(words.get(currentPosition));
   Tree<String> tagTree =
       new Tree<String>(tags.get(currentPosition), Collections.singletonList(leafTree));
   return tagTree;
 }
 private Tree<String> addRoot(Tree<String> tree) {
   return new Tree<String>("ROOT", Collections.singletonList(tree));
 }