public Edge addPhraseStructureEdge(PhraseStructureNode parent, PhraseStructureNode child) throws MaltChainedException { if (parent == null || child == null) { throw new MaltChainedException("Parent or child node is missing in sentence "+getSentenceID()); } else if (parent.getBelongsToGraph() != this || child.getBelongsToGraph() != this) { throw new MaltChainedException("Parent or child node is not a member of the graph in sentence "+getSentenceID()); } else if (parent == child) { throw new MaltChainedException("It is not allowed to add a phrase structure edge connecting the same node in sentence "+getSentenceID()); } else if (parent instanceof NonTerminalNode && !child.isRoot()) { Edge e = edgePool.checkOut(); e.setBelongsToGraph(this); e.setEdge((Node)parent, (Node)child, Edge.PHRASE_STRUCTURE_EDGE); graphEdges.add(e); return e; } else { throw new MaltChainedException("Parent or child node is not of correct node type."); } }
if (column.getCategory() == ColumnDescription.INPUT) { SymbolTable table = symbolTables.getSymbolTable(column.getName()); writer.write(terminal.getLabelSymbol(table)); int nTabs = 1; if (ti == 1 || ti == 2) { nTabs = 3 - (terminal.getLabelSymbol(table).length() / 8); } else if (ti == 3) { nTabs = 1; } else if (ti == 4) { nTabs = 2 - (terminal.getLabelSymbol(table).length() / 8); } else if (column.getCategory() == ColumnDescription.PHRASE_STRUCTURE_EDGE_LABEL) { SymbolTable table = symbolTables.getSymbolTable(column.getName()); if (terminal.getParent() != null && terminal.hasParentEdgeLabel(table)) { writer.write(terminal.getParentEdgeLabelSymbol(table)); writer.write('\t'); } else { if (terminal.getParent() == null || terminal.getParent() == phraseStructure.getPhraseStructureRoot()) { writer.write('0'); } else { writer.write(Integer.toString(nonTerminalIndexMap.get(terminal.getParent().getIndex()))); for (Edge e : terminal.getIncomingSecondaryEdges()) { if (e.hasLabel(table)) { writer.write('\t');
private boolean matchHeadChild(PhraseStructureNode child, PrioSetMember member) throws MaltChainedException { if (child instanceof NonTerminalNode && member.getTable().getName().equals("CAT") && member.getSymbolCode() == child.getLabelCode(member.getTable())) { return true; } else if (member.getTable().getName().equals("LABEL") && member.getSymbolCode() == child.getParentEdgeLabelCode(member.getTable())) { return true; } else if (child instanceof TokenNode && member.getColumn().getCategory() == ColumnDescription.INPUT && member.getSymbolCode() == child.getLabelCode(member.getTable())) { return true; } return false; }
private void writeTerminals(PhraseStructure phraseStructure) throws MaltChainedException { try { writer.write(" <terminals>\n"); for (int index : phraseStructure.getTokenIndices()) { final PhraseStructureNode t = phraseStructure.getTokenNode(index); writer.write(" <t "); if (!labeledTerminalID) { tmpID.setLength(0); tmpID.append(sentenceID); tmpID.append('_'); tmpID.append(Integer.toString(t.getIndex())); writer.write("id=\"");writer.write(tmpID.toString());writer.write("\" "); } for (ColumnDescription column : dataFormatInstance.getInputColumnDescriptionSet()) { writer.write(column.getName().toLowerCase()); writer.write("=\""); writer.write(Util.xmlEscape(t.getLabelSymbol(phraseStructure.getSymbolTables().getSymbolTable(column.getName())))); writer.write("\" "); } writer.write("/>\n"); } writer.write(" </terminals>\n"); } catch (IOException e) { throw new DataFormatException("The TigerXML writer is not able to write. ", e); } }
final SymbolTableHandler symbolTables = phraseStructure.getSymbolTables(); for (ColumnDescription column : dataFormatInstance.getPhraseStructureNodeLabelColumnDescriptionSet()) { if (root.hasLabel(symbolTables.getSymbolTable(column.getName())) && root.getLabelSymbol(symbolTables.getSymbolTable(column.getName())).equals(VROOT_SYMBOL)) { useVROOT = true; break; rootID.append('_'); rootID.append(VROOT_SYMBOL); } else if (phraseStructure.nTokenNode() == 1 && phraseStructure.nNonTerminals() == 0 && !root.isLabeled()) { rootID.setLength(0); rootID.append(sentenceID);
if (t.hasLabel(table)) { writer.write(t.getLabelSymbol(table)); if (t.hasParentEdgeLabel(table) && !t.getParent().isRoot() && !t.getParentEdgeLabelSymbol(table).equals(EMPTY_EDGELABEL)) { writer.write(EDGELABEL_SEPARATOR); writer.write(t.getParentEdgeLabelSymbol(table)); for (String edgeLabelColumn : edgeLabelColumns.keySet()) { table = symbolTables.getSymbolTable(edgeLabelColumns.get(edgeLabelColumn).getName()); if (nt.hasParentEdgeLabel(table) && !nt.getParent().isRoot() && !nt.getParentEdgeLabelSymbol(table).equals(EMPTY_EDGELABEL)) { writer.write(EDGELABEL_SEPARATOR); writer.write(nt.getParentEdgeLabelSymbol(table));
if (child.hasParentEdgeLabel(symbolTables.getSymbolTable(column.getName()))) { writer.write(column.getName().toLowerCase()); writer.write("=\""); writer.write(Util.xmlEscape(child.getParentEdgeLabelSymbol(symbolTables.getSymbolTable(column.getName())))); writer.write("\" "); tmpID.append(sentenceID); tmpID.append('_'); tmpID.append(Integer.toString(child.getIndex())); writer.write(" idref=\"");writer.write(tmpID.toString());writer.write("\""); } else { writer.write(" idref=\"");writer.write(child.getLabelSymbol(symbolTables.getSymbolTable("ID")));writer.write("\""); tmpID.append(sentenceID); tmpID.append('_'); tmpID.append(Integer.toString(child.getIndex()+START_ID_OF_NONTERMINALS-1)); writer.write(" idref=\"");writer.write(tmpID.toString());writer.write("\"");
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)); } }
public void updatePhraseStructureGraph(MappablePhraseStructureGraph graph, Edge depEdge, boolean attachHeadSpineToRoot) throws MaltChainedException { PhraseStructureNode dependentSpine = (PhraseStructureNode)depEdge.getTarget(); if (((PhraseStructureNode)depEdge.getTarget()).getParent() == null) { dependentSpine.addLabel(graph.getSymbolTables().addSymbolTable(CAT), phraseSpineLabel.substring(ps,i)); while (dependentSpine.getParent() != null && !dependentSpine.getParent().isRoot()) { dependentSpine = dependentSpine.getParent(); if (((PhraseStructureNode)depEdge.getSource()).getParent() != null) { headSpine = ((PhraseStructureNode)depEdge.getSource()).getParent(); if (depEdge.hasLabel(graph.getSymbolTables().getSymbolTable(ATTACH))) { try { headSpine = headSpine.getParent();
public void connectUnattachedSpines(MappablePhraseStructureGraph graph) throws MaltChainedException { connectUnattachedSpines(graph, graph.getDependencyRoot()); if (!graph.getPhraseStructureRoot().isLabeled()) { graph.getPhraseStructureRoot().addLabel(graph.getSymbolTables().addSymbolTable(CAT), graph.getDefaultRootEdgeLabelSymbol(graph.getSymbolTables().getSymbolTable(PHRASE))); } }
private void updateDependenyLabels(MappablePhraseStructureGraph graph) throws MaltChainedException { for (int index :graph.getTokenIndices()) { PhraseStructureNode top = (PhraseStructureNode)graph.getTokenNode(index); while (top != null && top.getParent() != null &&graph.getTokenNode(index) == ((NonTerminalNode)top.getParent()).getLexicalHead(headRules)) { top = top.getParent(); } lockUpdate = true; labelDependencyEdge(graph, graph.getTokenNode(index).getHeadEdge(), top); lockUpdate = false; } }
if (start == newbegin) { if (phraseLabelColumnsIterator.hasNext()) { nt.addLabel(symbolTables.getSymbolTable(phraseLabelColumns.get(phraseLabelColumnsIterator.next()).getName()), (i == index - 1)?input.substring(start,index):input.substring(start, i));
if (t.hasLabel(table)) { writer.write(encodeString(t.getLabelSymbol(table))); if (t.hasParentEdgeLabel(table) && !t.getParent().isRoot() && !t.getParentEdgeLabelSymbol(table).equals(EMPTY_EDGELABEL)) { writer.write(EDGELABEL_SEPARATOR); writer.write(t.getParentEdgeLabelSymbol(table)); for (String edgeLabelColumn : edgeLabelColumns.keySet()) { table = symbolTables.getSymbolTable(edgeLabelColumns.get(edgeLabelColumn).getName()); if (nt.hasParentEdgeLabel(table) && !nt.getParent().isRoot() && !nt.getParentEdgeLabelSymbol(table).equals(EMPTY_EDGELABEL)) { writer.write(EDGELABEL_SEPARATOR); writer.write(nt.getParentEdgeLabelSymbol(table));
public boolean isContinuous() { int lcorner = getLeftmostProperDescendant().getIndex(); int rcorner = getRightmostProperDescendant().getIndex(); if (lcorner == rcorner) { return true; } TokenNode terminal = ((TokenStructure)getBelongsToGraph()).getTokenNode(lcorner); while (terminal.getIndex() != rcorner) { PhraseStructureNode tmp = terminal.getParent(); while (true) { if (tmp == this) { break; } if (tmp == null) { return false; } tmp = tmp.getParent(); } terminal = terminal.getTokenNodeSuccessor(); } return true; }
SortedMap<String, SymbolTable> edgeLabelSymbolTables = phraseStructuretDataFormatInstance.getPhraseStructureEdgeLabelSymbolTables(symbolTableHandler); SortedMap<String, SymbolTable> nodeLabelSymbolTables = phraseStructuretDataFormatInstance.getPhraseStructureNodeLabelSymbolTables(symbolTableHandler); if (!top.isRoot()) { for (String name : edgeLabelSymbolTables.keySet()) { if (top.hasParentEdgeLabel(symbolTables.getSymbolTable(name))) { deprel.append(top.getParentEdgeLabelSymbol(symbolTables.getSymbolTable(name))); } else { deprel.append(EMPTY_LABEL); while (tmp != top && tmp.getParent() != null) { // && !tmp.getParent().isRoot()) { i=0; for (String name : edgeLabelSymbolTables.keySet()) { if (tmp.hasParentEdgeLabel(symbolTables.getSymbolTable(name))) { headrel.append(tmp.getParentEdgeLabelSymbol(symbolTables.getSymbolTable(name))); } else { headrel.append(EMPTY_LABEL); headrel.append(SPINE_ELEMENT_SEPARATOR); for (String name : nodeLabelSymbolTables.keySet()) { if (tmp.getParent().hasLabel(symbolTables.getSymbolTable(name))) { phrase.append(tmp.getParent().getLabelSymbol(symbolTables.getSymbolTable(name))); } else { if (tmp.getParent().isRoot()) { String deprelDefaultRootLabel = graph.getDefaultRootEdgeLabelSymbol(symbolTables.getSymbolTable(PHRASE)); if (deprelDefaultRootLabel != null) { tmp = tmp.getParent(); int a = 0;
public boolean isContinuousExcludeTerminalsAttachToRoot() { int lcorner = getLeftmostProperDescendant().getIndex(); int rcorner = getRightmostProperDescendant().getIndex(); if (lcorner == rcorner) { return true; } TokenNode terminal = ((TokenStructure)getBelongsToGraph()).getTokenNode(lcorner); while (terminal.getIndex() != rcorner) { if (terminal.getParent() != null && terminal.getParent().isRoot()) { terminal = terminal.getTokenNodeSuccessor(); continue; } PhraseStructureNode tmp = terminal.getParent(); while (true) { if (tmp == this) { break; } if (tmp == null) { return false; } tmp = tmp.getParent(); } terminal = terminal.getTokenNodeSuccessor(); } return true; }