@Override public Iterator<Edge> getOutgoingEdgeIterator() { List<DependencyNode> dependents = getListOfDependents(); List<Edge> outEdges = new ArrayList<Edge>(dependents.size()); for (int i = 0; i < dependents.size(); i++) { try { outEdges.add(dependents.get(i).getHeadEdge()); } catch (MaltChainedException e) { e.printStackTrace(); } } return outEdges.iterator(); }
public String toStringTerminalNode(TokenNode node) { final StringBuilder sb = new StringBuilder(); final DependencyNode depnode = node; sb.append(node.toString().trim()); if (depnode.hasHead()) { sb.append('\t'); try { sb.append(depnode.getHead().getIndex()); sb.append('\t'); sb.append(depnode.getHeadEdge().toString()); } catch (MaltChainedException e) { System.err.println(e); } } sb.append('\n'); return sb.toString(); }
public String toStringTerminalNode(TokenNode node) { final StringBuilder sb = new StringBuilder(); final DependencyNode depnode = node; sb.append(node.toString().trim()); if (depnode.hasHead()) { sb.append('\t'); try { sb.append(depnode.getHead().getIndex()); sb.append('\t'); sb.append(depnode.getHeadEdge().toString()); } catch (MaltChainedException e) { System.err.println(e); } } sb.append('\n'); return sb.toString(); }
private DependencyNode breadthFirstSearchSortedByDistanceForHead(DependencyStructure dg, DependencyNode start, DependencyNode avoid, String syntacticHeadDeprel, boolean[] nodePath, SymbolTable deprelSymbolTable) throws MaltChainedException { DependencyNode dependent; String dependentDeprel; List<DependencyNode> nodes = new ArrayList<DependencyNode>(); nodes.addAll(findAllDependentsVectorSortedByDistanceToPProjNode(dg, start, avoid, false, nodePath)); while (nodes.size() > 0) { dependent = nodes.remove(0); if (dependent.getHeadEdge().hasLabel(deprelSymbolTable)) { dependentDeprel = deprelSymbolTable.getSymbolCodeToString(dependent.getHeadEdge().getLabelCode(deprelSymbolTable)); if (dependentDeprel.equals(syntacticHeadDeprel)) { return dependent; } } nodes.addAll(findAllDependentsVectorSortedByDistanceToPProjNode(dg, dependent, avoid, false, nodePath)); } return null; }
private DependencyNode breadthFirstSearchSortedByDistanceForHead(DependencyStructure dg, DependencyNode start, DependencyNode avoid, String syntacticHeadDeprel) throws MaltChainedException { DependencyNode dependent; String dependentDeprel; Vector<DependencyNode> nodes = new Vector<DependencyNode>(); nodes.addAll(findAllDependentsVectorSortedByDistanceToPProjNode(dg, start, avoid, false)); while (nodes.size() > 0) { dependent = nodes.remove(0); if (dependent.getHeadEdge().hasLabel(deprelSymbolTable)) { dependentDeprel = deprelSymbolTable.getSymbolCodeToString(dependent.getHeadEdge().getLabelCode(deprelSymbolTable)); if (dependentDeprel.equals(syntacticHeadDeprel)) { return dependent; } } nodes.addAll(findAllDependentsVectorSortedByDistanceToPProjNode(dg, dependent, avoid, false)); } return null; }
private DependencyNode breadthFirstSearchSortedByDistanceForHeadAndPath(DependencyStructure dg, DependencyNode start, DependencyNode avoid, String syntacticHeadDeprelCode, boolean[] nodePath, SymbolTable deprelSymbolTable) throws MaltChainedException { DependencyNode dependent; List<DependencyNode> nodes = new ArrayList<DependencyNode>(), newNodes = null, secondChance = new ArrayList<DependencyNode>(); nodes.addAll(findAllDependentsVectorSortedByDistanceToPProjNode(dg, start, avoid, true, nodePath)); while (nodes.size() > 0) { dependent = nodes.remove(0); if (((newNodes = findAllDependentsVectorSortedByDistanceToPProjNode(dg, dependent, avoid, true, nodePath)).size()) == 0 && deprelSymbolTable.getSymbolCodeToString(dependent.getHeadEdge().getLabelCode(deprelSymbolTable)).equals(syntacticHeadDeprelCode)) { return dependent; } nodes.addAll(newNodes); if (deprelSymbolTable.getSymbolCodeToString(dependent.getHeadEdge().getLabelCode(deprelSymbolTable)).equals(syntacticHeadDeprelCode) && newNodes.size() != 0) { secondChance.add(dependent); } } if (secondChance.size() > 0) { return secondChance.get(0); } return null; } }
private DependencyNode breadthFirstSearchSortedByDistanceForHeadAndPath(DependencyStructure dg, DependencyNode start, DependencyNode avoid, String syntacticHeadDeprelCode) throws MaltChainedException { DependencyNode dependent; Vector<DependencyNode> nodes = new Vector<DependencyNode>(), newNodes = null, secondChance = new Vector<DependencyNode>(); nodes.addAll(findAllDependentsVectorSortedByDistanceToPProjNode(dg, start, avoid, true)); while (nodes.size() > 0) { dependent = nodes.remove(0); if (((newNodes = findAllDependentsVectorSortedByDistanceToPProjNode(dg, dependent, avoid, true)).size()) == 0 && deprelSymbolTable.getSymbolCodeToString(dependent.getHeadEdge().getLabelCode(deprelSymbolTable)).equals(syntacticHeadDeprelCode)) { return dependent; } nodes.addAll(newNodes); if (deprelSymbolTable.getSymbolCodeToString(dependent.getHeadEdge().getLabelCode(deprelSymbolTable)).equals(syntacticHeadDeprelCode) && newNodes.size() != 0) { secondChance.add(dependent); } } if (secondChance.size() > 0) { return secondChance.firstElement(); } return null; } }
private void setLabel(DependencyNode node, String label) throws MaltChainedException { // node.getLabelCode().clear(); node.getHeadEdge().getLabelSet().put(deprelSymbolTable, deprelSymbolTable.addSymbol(label)); }
private void initProjectivization(DependencyStructure pdg) throws MaltChainedException { nodeLifted.clear(); nodeTrace.clear(); headDeprel.clear(); nodePath.clear(); isCoveredRoot.clear(); nodeRelationLength.clear(); for (int index : pdg.getDependencyIndices()) { nodeLifted.add(false); nodeTrace.add(new Vector<DependencyNode>()); headDeprel.add(null); nodePath.add(false); isCoveredRoot.add(false); if (ppliftedSymbolTable != null && index != 0) { pdg.getDependencyNode(index).getHeadEdge().getLabelSet().put(ppliftedSymbolTable, ppliftedSymbolTable.getSymbolStringToCode("#false#")); } if (pppathSymbolTable != null && index != 0) { pdg.getDependencyNode(index).getHeadEdge().getLabelSet().put(pppathSymbolTable, pppathSymbolTable.getSymbolStringToCode("#false#")); } if (ppcoveredRootSymbolTable != null && index != 0) { pdg.getDependencyNode(index).getHeadEdge().getLabelSet().put(ppcoveredRootSymbolTable, ppcoveredRootSymbolTable.getSymbolStringToCode("#false#")); } } computeRelationLength(pdg); }
sb.append(node.getHead().getIndex()); sb.append('\t'); if (node.getHeadEdge().hasLabel(deprelTable)) { sb.append(node.getHeadEdge().getLabelSymbol(deprelTable)); } else { sb.append(outputGraph.getDefaultRootEdgeLabelSymbol(deprelTable));
private void deattachCoveredRootsForDeprojectivization(DependencyStructure pdg) throws MaltChainedException { for (int index : pdg.getTokenIndices()) { if (pdg.getDependencyNode(index).getHeadEdge().hasLabel(deprelSymbolTable)) { if (pdg.getDependencyNode(index).getHeadEdge().hasLabel(ppcoveredRootSymbolTable) && ppcoveredRootSymbolTable.getSymbolCodeToString(pdg.getDependencyNode(index).getHeadEdge().getLabelCode(ppcoveredRootSymbolTable)).equals( "#true#")) { pdg.moveDependencyEdge(pdg.getDependencyRoot().getIndex(), pdg.getDependencyNode(index).getIndex()); } } } }
public boolean hasLabeledDependency(int index) throws MaltChainedException { return (getDependencyNode(index).hasHead() && getDependencyNode(index).getHeadEdge().isLabeled()); }
public boolean hasLabeledDependency(int index) throws MaltChainedException { return (getDependencyNode(index).hasHead() && getDependencyNode(index).getHeadEdge().isLabeled()); }
public void deprojectivize(DependencyStructure pdg) throws MaltChainedException { initDeprojeciviztion(pdg); for (int index : pdg.getTokenIndices()) { if (pdg.getDependencyNode(index).getHeadEdge().hasLabel(deprelSymbolTable)) { if (pdg.getDependencyNode(index).getHeadEdge().hasLabel(pppathSymbolTable) && pppathSymbolTable.getSymbolCodeToString(pdg.getDependencyNode(index).getHeadEdge().getLabelCode(pppathSymbolTable)).equals("#true#")) { setPath(pdg.getDependencyNode(index)); } if (pdg.getDependencyNode(index).getHeadEdge().hasLabel(ppliftedSymbolTable) && !ppliftedSymbolTable.getSymbolCodeToString(pdg.getDependencyNode(index).getHeadEdge().getLabelCode(ppliftedSymbolTable)).equals("#false#")) { nodeLifted.set(index, true); if (!ppliftedSymbolTable.getSymbolCodeToString(pdg.getDependencyNode(index).getHeadEdge().getLabelCode(ppliftedSymbolTable)).equals("#true#")) { synacticHeadDeprel.set(index, ppliftedSymbolTable.getSymbolCodeToString(pdg.getDependencyNode(index).getHeadEdge() .getLabelCode(ppliftedSymbolTable))); } } } } deattachCoveredRootsForDeprojectivization(pdg); if (markingStrategy == PseudoProjectiveEncoding.HEAD && needsDeprojectivizeWithHead(pdg)) { deprojectivizeWithHead(pdg, pdg.getDependencyRoot()); } else if (markingStrategy == PseudoProjectiveEncoding.PATH) { deprojectivizeWithPath(pdg, pdg.getDependencyRoot()); } else if (markingStrategy == PseudoProjectiveEncoding.HEADPATH) { deprojectivizeWithHeadAndPath(pdg, pdg.getDependencyRoot()); } }
private void deattachCoveredRootsForDeprojectivization(DependencyStructure pdg, SymbolTable deprelSymbolTable) throws MaltChainedException { SymbolTable ppcoveredRootSymbolTable = pdg.getSymbolTables().getSymbolTable("PPCOVERED"); for (int index : pdg.getTokenIndices()) { Edge e = pdg.getDependencyNode(index).getHeadEdge(); if (e.hasLabel(deprelSymbolTable)) { if (e.hasLabel(ppcoveredRootSymbolTable) && ppcoveredRootSymbolTable.getSymbolCodeToString(e.getLabelCode(ppcoveredRootSymbolTable)).equals("#true#")) { pdg.moveDependencyEdge(pdg.getDependencyRoot().getIndex(), pdg.getDependencyNode(index).getIndex()); } } } }
private void connectUnattachedSpines(MappablePhraseStructureGraph graph, DependencyNode depNode) throws MaltChainedException { if (!depNode.isRoot()) { PhraseStructureNode dependentSpine = (PhraseStructureNode)depNode; while (dependentSpine.getParent() != null) { dependentSpine = dependentSpine.getParent(); } if (!dependentSpine.isRoot()) { updatePhraseStructureGraph(graph,depNode.getHeadEdge(),true); } } for (int i = 0; i < depNode.getLeftDependentCount(); i++) { connectUnattachedSpines(graph, depNode.getLeftDependent(i)); } for (int i = depNode.getRightDependentCount()-1; i >= 0 ; i--) { connectUnattachedSpines(graph, depNode.getRightDependent(i)); } }
protected Edge moveDependencyEdge(DependencyNode newHead, DependencyNode dependent) throws MaltChainedException { if (dependent == null || !dependent.hasHead()) { return null; } Edge headEdge = dependent.getHeadEdge(); final LabelSet labels = checkOutNewLabelSet(); for (SymbolTable table : headEdge.getLabelTypes()) { labels.put(table, headEdge.getLabelCode(table)); } headEdge.clear(); headEdge.setBelongsToGraph(this); headEdge.setEdge((Node)newHead, (Node)dependent, Edge.DEPENDENCY_EDGE); headEdge.addLabel(labels); labels.clear(); checkInLabelSet(labels); return headEdge; }
/** * Copies the edges of the source dependency structure to the target dependency structure * * @param source a source dependency structure * @param target a target dependency structure * @throws MaltChainedException */ protected void copyEdges(DependencyStructure source, DependencyStructure target) throws MaltChainedException { for (int index : source.getTokenIndices()) { DependencyNode snode = source.getDependencyNode(index); if (snode.hasHead()) { Edge s = snode.getHeadEdge(); Edge t = target.addDependencyEdge(s.getSource().getIndex(), s.getTarget().getIndex()); for (SymbolTable table : s.getLabelTypes()) { t.addLabel(table, s.getLabelSymbol(table)); } } } }
public Edge moveDependencyEdge(DependencyNode newHead, DependencyNode dependent) throws MaltChainedException { if (dependent == null || !dependent.hasHead() || newHead.getBelongsToGraph() != this || dependent.getBelongsToGraph() != this) { return null; } Edge headEdge = dependent.getHeadEdge(); LabelSet labels = null; if (headEdge.isLabeled()) { labels = checkOutNewLabelSet(); for (SymbolTable table : headEdge.getLabelTypes()) { labels.put(table, headEdge.getLabelCode(table)); } } headEdge.clear(); headEdge.setBelongsToGraph(this); headEdge.setEdge((Node)newHead, (Node)dependent, Edge.DEPENDENCY_EDGE); if (labels != null) { headEdge.addLabel(labels); labels.clear(); checkInLabelSet(labels); } return headEdge; }
public void update() throws MaltChainedException { final AddressValue a = addressFunction.getAddressValue(); if (a.getAddress() == null) { featureValue.update(symbolTable.getNullValueCode(NullValueId.NO_NODE), symbolTable.getNullValueSymbol(NullValueId.NO_NODE), true, 1); } else { final DependencyNode node = (DependencyNode)a.getAddress(); if (!node.isRoot()) { if (node.hasHead()) { int indexCode = node.getHeadEdge().getLabelCode(symbolTable); String symbol = symbolTable.getSymbolCodeToString(indexCode); if (column.getType() == ColumnDescription.STRING) { featureValue.update(indexCode, symbol, false, 1); } else { castFeatureValue(symbol); } } else { featureValue.update(symbolTable.getNullValueCode(NullValueId.NO_VALUE), symbolTable.getNullValueSymbol(NullValueId.NO_VALUE), true, 1); } } else { featureValue.update(symbolTable.getNullValueCode(NullValueId.ROOT_NODE), symbolTable.getNullValueSymbol(NullValueId.ROOT_NODE), true, 1); } } }