List of usage examples for edu.stanford.nlp.trees Tree value
@Override
public String value()
From source file:sg.edu.nus.comp.pdtb.parser.ConnComp.java
License:Open Source License
public static String printFeature(Tree root, List<Node> nodes, boolean isExplicit, boolean isIntra) { char label = isExplicit ? '1' : '0'; StringBuilder feature = new StringBuilder(); StringBuilder tmp = new StringBuilder(); StringBuilder tmp2 = new StringBuilder(); for (Node node : nodes) { tmp.append(node.tree.parent(root).value() + " "); tmp2.append(node.tree.value() + " "); }//w w w .j av a 2 s . c o m String POS = tmp.toString().trim().replace(' ', '_'); String connStr = tmp2.toString().trim().replace(' ', '_'); if (isIntra) { connStr = connStr.replaceAll("_", ".."); } List<Tree> leaves = root.getLeaves(); int firstNodeNum = nodes.get(0).index; int lastNodeNum = nodes.get(nodes.size() - 1).index; Tree prevNode = firstNodeNum > 0 ? leaves.get(--firstNodeNum) : null; Tree nextNode = (leaves.size() > lastNodeNum + 1) ? leaves.get(++lastNodeNum) : null; feature.append("conn_lc:"); feature.append(connStr.toLowerCase()); feature.append(' '); feature.append("conn:"); feature.append(connStr); feature.append(' '); feature.append("lexsyn:conn_POS:"); feature.append(POS); feature.append(' '); if (prevNode != null) { while (prevNode.parent(root).value().equals("-NONE-") && firstNodeNum > 0) { prevNode = leaves.get(--firstNodeNum); } if (prevNode != null) { String prevPOS = prevNode.parent(root).value().replace(' ', '_'); feature.append("lexsyn:with_prev_full:"); feature.append(prevNode.value().replace(' ', '_')); feature.append('_'); feature.append(connStr); feature.append(' '); feature.append("lexsyn:prev_POS:"); feature.append(prevPOS); feature.append(' '); feature.append("lexsyn:with_prev_POS:"); feature.append(prevPOS); feature.append('_'); feature.append(POS.split("_")[0]); feature.append(' '); feature.append("lexsyn:with_prev_POS_full:"); feature.append(prevPOS); feature.append('_'); feature.append(POS); feature.append(' '); } } if (nextNode != null) { while (nextNode.parent(root).value().equals("-NONE-")) { nextNode = leaves.get(++lastNodeNum); } String nextPOS = nextNode.parent(root).value().replace(' ', '_'); feature.append("lexsyn:with_next_full:"); feature.append(connStr); feature.append('_'); feature.append(nextNode.value().replace(' ', '_')); feature.append(' '); feature.append("lexsyn:next_POS:"); feature.append(nextPOS); feature.append(' '); feature.append("lexsyn:with_next_POS:"); feature.append(POS.split("_")[nodes.size() - 1]); feature.append('_'); feature.append(nextPOS); feature.append(' '); feature.append("lexsyn:with_next_POS_full:"); feature.append(POS); feature.append('_'); feature.append(nextPOS); feature.append(' '); } // Pitler & Nenkova (ACL 09) features: Tree parent = getMutualParent(nodes, root); Tree grandparent = parent.parent(root); List<Tree> siblings = grandparent.getChildrenAsList(); String selfCat = parent.value().split("-")[0].split("=")[0]; String parentCat = grandparent.value() == null ? "NONE" : grandparent.value().split("-")[0].split("=")[0]; Tree leftSib = null; Tree rightSib = null; String leftCat = "NONE"; String rightCat = "NONE"; int index = siblings.indexOf(parent); if (index > 0) { leftSib = siblings.get(index - 1); leftCat = leftSib.value().startsWith("-") ? leftSib.value() : leftSib.value().split("-")[0].split("=")[0]; leftCat = leftCat.isEmpty() ? "-NONE-" : leftCat; } if (index < siblings.size() - 1) { rightSib = siblings.get(index + 1); rightCat = rightSib.value().startsWith("-") ? rightSib.value() : rightSib.value().split("-")[0].split("=")[0]; rightCat = rightCat.isEmpty() ? "-NONE-" : rightCat; } boolean rightVP = containsNode(rightSib, "VP"); boolean rightTrace = containsTrace(rightSib); List<String> syn = new ArrayList<>(); syn.add("selfCat:" + selfCat); syn.add("parentCat:" + parentCat); syn.add("leftCat:" + leftCat); syn.add("rightCat:" + rightCat); if (rightVP) { syn.add("rightVP"); } if (rightTrace) { syn.add("rightTrace"); } for (String cat : syn) { feature.append("syn:"); feature.append(cat); feature.append(' '); } for (String cat : syn) { feature.append("conn-syn:conn:"); feature.append(connStr); feature.append('-'); feature.append(cat); feature.append(' '); } for (int i = 0; i < syn.size(); ++i) { for (int j = i + 1; j < syn.size(); ++j) { feature.append("syn-syn:"); feature.append(syn.get(i)); feature.append('-'); feature.append(syn.get(j)); feature.append(' '); } } String[] synFeatures = getSyntacticfeatures(parent, root); feature.append("path-self>root:"); feature.append(synFeatures[0]); feature.append(' '); feature.append("path-self>root2:"); feature.append(synFeatures[1]); feature.append(' '); feature.append(label); return feature.toString().replaceAll("/", "\\\\/"); }
From source file:sg.edu.nus.comp.pdtb.parser.ConnComp.java
License:Open Source License
private static String[] getSyntacticfeatures(Tree node, Tree root) { StringBuilder selfToRoot = new StringBuilder(); StringBuilder selfToRootNoRepeat = new StringBuilder(); String val = node.value().split("-")[0].split("=")[0]; selfToRoot.append(val); selfToRootNoRepeat.append(node.value().split("-")[0].split("=")[0]); Tree prev = node;//from w w w. j a v a 2 s .com node = node.parent(root); while (!node.equals(root)) { selfToRoot.append("_>_"); selfToRoot.append(node.value().split("-")[0].split("=")[0]); if (!prev.value().split("-")[0].equals(node.value().split("-")[0].split("=")[0])) { selfToRootNoRepeat.append("_>_"); selfToRootNoRepeat.append(node.value().split("-")[0].split("=")[0]); } prev = node; node = node.parent(root); } return new String[] { selfToRoot.toString(), selfToRootNoRepeat.toString() }; }
From source file:sg.edu.nus.comp.pdtb.parser.ConnComp.java
License:Open Source License
private static boolean containsTrace(Tree node) { if (node == null) { return false; }// ww w . ja v a 2 s .co m if (node.value().equals("-NONE-") && node.firstChild().value().matches("^\\*T\\*.*")) { return true; } List<Tree> children = node.getChildrenAsList(); for (Tree child : children) { if (containsTrace(child)) { return true; } } return false; }
From source file:sg.edu.nus.comp.pdtb.parser.ConnComp.java
License:Open Source License
private static boolean containsNode(Tree node, String nodeValue) { if (node == null) { return false; }/*from w w w .j a va2 s .c o m*/ String value = node.value(); value = value.split("=").length > 1 ? value.split("=")[0] : value; value = value.split("-").length > 1 ? value.split("-")[0] : value; if (value.equals(nodeValue)) { return true; } List<Tree> children = node.getChildrenAsList(); for (Tree child : children) { if (containsNode(child, nodeValue)) { return true; } } return false; }
From source file:sg.edu.nus.comp.pdtb.parser.ExplicitComp.java
License:Open Source License
private String printFeature(Tree root, List<Node> nodes, String label) { StringBuilder feature = new StringBuilder(); StringBuilder tmp = new StringBuilder(); StringBuilder tmp2 = new StringBuilder(); for (Node node : nodes) { if (node.tree.parent(root) != null) { tmp.append(node.tree.parent(root).value() + " "); tmp2.append(node.tree.value() + " "); }/*from w w w.j av a2 s.c o m*/ } String POS = tmp.toString().trim().replace(' ', '_'); String connStr = tmp2.toString().trim().replace(' ', '_'); if (connStr.equalsIgnoreCase("if_then") || connStr.equalsIgnoreCase("either_or") || connStr.equalsIgnoreCase("neither..nor")) { connStr = connStr.replaceAll("_", ".."); } List<Tree> leaves = root.getLeaves(); int firstNodeNum = nodes.get(0).index; Tree prevNode = firstNodeNum > 0 ? leaves.get(--firstNodeNum) : null; feature.append("conn_lc:"); feature.append(connStr.toLowerCase()); feature.append(' '); feature.append("conn:"); feature.append(connStr); feature.append(' '); feature.append("conn_POS:"); feature.append(POS); feature.append(' '); if (prevNode != null) { while (prevNode.parent(root).value().equals("-NONE-") && firstNodeNum > 0) { prevNode = leaves.get(--firstNodeNum); } if (prevNode != null) { feature.append("with_prev_full:"); feature.append(prevNode.value().replace(' ', '_').toLowerCase()); feature.append('_'); feature.append(connStr.toLowerCase()); feature.append(' '); } } feature.append(label.replace(' ', '_')); return feature.toString().replaceAll("/", "\\\\/"); }
From source file:sg.edu.nus.comp.pdtb.parser.NonExplicitComp.java
License:Open Source License
public static void getProductionRules(Tree tree, HashMap<String, Integer> prodRules) { String[] tr = tree.value().replaceAll("=[0-9]+", "").split("-"); String value = tr.length > 0 ? tr[0] : tree.value(); if (tree.isLeaf() || tree.value().startsWith("-")) { value = tree.value();/* www. jav a2 s . c o m*/ } StringBuilder rule = new StringBuilder(value); rule.append(" ->"); for (Tree child : tree.children()) { if (!child.value().equalsIgnoreCase("-NONE-")) { String[] tmp = child.value().replaceAll("=[0-9]+", "").split("-"); String cVal = tmp.length > 0 ? tmp[0] : child.value(); if (child.isLeaf() || child.value().startsWith("-")) { cVal = child.value(); } rule.append(" "); rule.append(cVal); } } String key = rule.toString().replaceAll("\\s+", "_"); // has some child values if (!key.endsWith("->")) { Integer count = prodRules.get(key); if (count == null) { count = 0; } ++count; prodRules.put(key, count); } for (Tree child : tree.children()) { if (!child.value().equalsIgnoreCase("-NONE-")) { getProductionRules(child, prodRules); } } }
From source file:sg.edu.nus.comp.pdtb.parser.NonExplicitComp.java
License:Open Source License
public static void getDependencyRules(TreeNode treeNode, HashMap<String, Dependency> dtreeMap, HashMap<String, Integer> depRules) { Tree root = treeNode.getRoot();// www .j a v a 2 s. c o m Tree node = treeNode.getNode(); int treeNumber = treeNode.getTreeNumber(); List<Tree> allPosNodes = new ArrayList<Tree>(); getAllPosNodes(node, allPosNodes); List<Integer> leafNodes = new ArrayList<Integer>(); for (Tree pn : allPosNodes) { leafNodes.add(pn.firstChild().nodeNumber(root)); } for (int i = 0; i < leafNodes.size(); ++i) { Tree n = root.getNodeNumber(leafNodes.get(i)); int nInd = n.nodeNumber(root); Dependency nDepRel = dtreeMap.get(treeNumber + " : " + nInd); if (nDepRel != null) { List<Tree> nDependents = new ArrayList<Tree>(); for (Integer ind : nDepRel.getDependents()) { if (leafNodes.contains(ind)) { Tree d = root.getNodeNumber(ind); nDependents.add(d); } } if (nDependents.size() > 0) { // has nDependents String rule = n.value() + " <- "; for (Tree n1 : nDependents) { int n1Ind = n1.nodeNumber(root); Dependency n1DepRel = dtreeMap.get(treeNumber + " : " + n1Ind); String dependency = n1DepRel.getLabel(); rule += "<" + dependency + "> "; } rule = rule.trim(); if (!rule.endsWith("<-")) { // rule has some child values rule = rule.replace(' ', '_'); Integer value = depRules.containsKey(rule) ? depRules.get(rule) : 0; value += 1; depRules.put(rule, value); } } } } }
From source file:sg.edu.nus.comp.pdtb.parser.NonExplicitComp.java
License:Open Source License
public static void getAllPosNodes(Tree node, List<Tree> allPosNodes) { boolean isPos = node.numChildren() == 1 && node.firstChild().isLeaf(); if (!isPos) { for (Tree child : node.children()) { getAllPosNodes(child, allPosNodes); }/* w w w .ja va 2 s. c om*/ } else { if (!node.value().equalsIgnoreCase("-NONE-")) { allPosNodes.add(node); } } }
From source file:tml.utils.StanfordUtils.java
License:Apache License
/** * @param t the tree to which extract the content * @return the string with the content of the tree *///from ww w .ja v a2 s . co m public static String nodeContent(Tree t, Tree pv) { if (t.isLeaf()) return t.value(); StringBuffer buff = new StringBuffer(); for (Tree tt : t.children()) { if (!t.value().equals("DT") && !t.value().equals("SYM") && !t.value().startsWith("PRP")) { buff.append(nodeContent(tt, t)); buff.append(" "); } } String clean = buff.toString().replace("\\s+", " ").trim(); return clean; }
From source file:tml.utils.StanfordUtils.java
License:Apache License
/** * @param t the tree to which extract the content * @return the string with the content of the tree *//*from ww w.j a v a 2s . co m*/ public static String nodeContent(Tree t) { if (t.isLeaf()) return t.value(); StringBuffer buff = new StringBuffer(); for (Tree tt : t.children()) { buff.append(nodeContent(tt)); buff.append(" "); } String clean = buff.toString().replace("\\s+", " ").trim(); return clean; }