forked from ttpro1995/TreeLSTMSentiment
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCollapseUnaryTransformer.java
More file actions
34 lines (31 loc) · 1.16 KB
/
Copy pathCollapseUnaryTransformer.java
File metadata and controls
34 lines (31 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import java.util.List;
import edu.stanford.nlp.ling.Label;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.TreeTransformer;
import edu.stanford.nlp.util.Generics;
/**
* This transformer collapses chains of unary nodes so that the top
* node is the only node left. The Sentiment model does not handle
* unary nodes, so this simplifies them to make a binary tree consist
* entirely of binary nodes and preterminals. A new tree with new
* nodes and labels is returned; the original tree is unchanged.
*
* @author John Bauer
*/
public class CollapseUnaryTransformer implements TreeTransformer {
public Tree transformTree(Tree tree) {
if (tree.isPreTerminal() || tree.isLeaf()) {
return tree.deepCopy();
}
Label label = tree.label().labelFactory().newLabel(tree.label());
Tree[] children = tree.children();
while (children.length == 1 && !children[0].isLeaf()) {
children = children[0].children();
}
List<Tree> processedChildren = Generics.newArrayList();
for (Tree child : children) {
processedChildren.add(transformTree(child));
}
return tree.treeFactory().newTreeNode(label, processedChildren);
}
}