示例#1
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void update(org.maltparser.core.syntaxgraph.MappablePhraseStructureGraph graph, org.maltparser.core.syntaxgraph.edge.Edge e, Object arg) throws org.maltparser.core.exception.MaltChainedException
        public virtual void update(MappablePhraseStructureGraph graph, Edge.Edge e, object arg)
        {
            if (lockUpdate == false)
            {
                //			if (e.getType() == Edge.PHRASE_STRUCTURE_EDGE && e.getSource() instanceof NonTerminalNode && lockUpdate == false) {
                //				if(e.getTarget() instanceof TerminalNode) {
                //					PhraseStructureNode top = (PhraseStructureNode)e.getTarget();
                //					while (top.getParent() != null && ((NonTerminalNode)top.getParent()).getLexicalHead() == (PhraseStructureNode)e.getTarget()) {
                //						top = top.getParent();
                //					}
                //					updateDependenyGraph(graph, top);
                //				}
                //				else if (e.getSource().isRoot()) {
                //					updateDependenyGraph(graph, graph.getPhraseStructureRoot());
                //				}
                //			}
                if (e.Type == Edge_Fields.DEPENDENCY_EDGE && e.Source is DependencyNode && e.Target is DependencyNode)
                {
                    if (e.Labeled && e.LabelSet.size() == 4)
                    {
                        updatePhraseStructureGraph(graph, (Edge.Edge)e, false);
                    }
                }
            }
        }
示例#2
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void connectUnattachedSpines(org.maltparser.core.syntaxgraph.MappablePhraseStructureGraph graph) throws org.maltparser.core.exception.MaltChainedException
        public virtual void connectUnattachedSpines(MappablePhraseStructureGraph graph)
        {
            connectUnattachedSpines(graph, graph.DependencyRoot);

            if (!graph.PhraseStructureRoot.Labeled)
            {
                graph.PhraseStructureRoot.addLabel(graph.SymbolTables.addSymbolTable(CAT), graph.GetDefaultRootEdgeLabelSymbol(graph.SymbolTables.getSymbolTable(PHRASE)));
            }
        }
示例#3
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void updateDependenyLabels(org.maltparser.core.syntaxgraph.MappablePhraseStructureGraph graph) throws org.maltparser.core.exception.MaltChainedException
        private void updateDependenyLabels(MappablePhraseStructureGraph graph)
        {
            foreach (int index in graph.TokenIndices)
            {
                PhraseStructureNode top = (PhraseStructureNode)graph.GetTokenNode(index);

                while (top != null && top.Parent != null && graph.GetTokenNode(index) == ((NonTerminalNode)top.Parent).getLexicalHead(headRules))
                {
                    top = top.Parent;
                }
                lockUpdate = true;
                labelDependencyEdge(graph, graph.GetTokenNode(index).HeadEdge, top);
                lockUpdate = false;
            }
        }
示例#4
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void updateDependenyGraph(org.maltparser.core.syntaxgraph.MappablePhraseStructureGraph graph, org.maltparser.core.syntaxgraph.node.PhraseStructureNode top) throws org.maltparser.core.exception.MaltChainedException
        public virtual void updateDependenyGraph(MappablePhraseStructureGraph graph, PhraseStructureNode top)
        {
            if (graph.NTokenNode() == 1 && graph.nNonTerminals() == 0)
            {
                // Special case when the root dominates direct a single terminal node
                Edge.Edge e = graph.addDependencyEdge(graph.DependencyRoot, graph.GetDependencyNode(1));
                e.addLabel(graph.SymbolTables.getSymbolTable(DEPREL), graph.GetDefaultRootEdgeLabelSymbol(graph.SymbolTables.getSymbolTable(DEPREL)));
                e.addLabel(graph.SymbolTables.getSymbolTable(HEADREL), graph.GetDefaultRootEdgeLabelSymbol(graph.SymbolTables.getSymbolTable(HEADREL)));
                e.addLabel(graph.SymbolTables.getSymbolTable(PHRASE), "*");
                //			e.addLabel(graph.getSymbolTables().getSymbolTable(PHRASE), graph.getDefaultRootEdgeLabelSymbol(graph.getSymbolTables().getSymbolTable(PHRASE)));
                e.addLabel(graph.SymbolTables.getSymbolTable(ATTACH), graph.GetDefaultRootEdgeLabelSymbol(graph.SymbolTables.getSymbolTable(ATTACH)));
            }
            else
            {
                updateDependencyEdges(graph, top);
                updateDependenyLabels(graph);
            }
        }
示例#5
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void connectUnattachedSpines(org.maltparser.core.syntaxgraph.MappablePhraseStructureGraph graph, org.maltparser.core.syntaxgraph.node.DependencyNode depNode) throws org.maltparser.core.exception.MaltChainedException
        private void connectUnattachedSpines(MappablePhraseStructureGraph graph, DependencyNode depNode)
        {
            if (!depNode.Root)
            {
                PhraseStructureNode dependentSpine = (PhraseStructureNode)depNode;
                while (dependentSpine.Parent != null)
                {
                    dependentSpine = dependentSpine.Parent;
                }
                if (!dependentSpine.Root)
                {
                    updatePhraseStructureGraph(graph, depNode.HeadEdge, true);
                }
            }
            for (int i = 0; i < depNode.LeftDependentCount; i++)
            {
                connectUnattachedSpines(graph, depNode.getLeftDependent(i));
            }
            for (int i = depNode.RightDependentCount - 1; i >= 0; i--)
            {
                connectUnattachedSpines(graph, depNode.getRightDependent(i));
            }
        }
示例#6
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public void updatePhraseStructureGraph(org.maltparser.core.syntaxgraph.MappablePhraseStructureGraph graph, org.maltparser.core.syntaxgraph.edge.Edge depEdge, boolean attachHeadSpineToRoot) throws org.maltparser.core.exception.MaltChainedException
        public virtual void updatePhraseStructureGraph(MappablePhraseStructureGraph graph, Edge.Edge depEdge, bool attachHeadSpineToRoot)
        {
            PhraseStructureNode dependentSpine = (PhraseStructureNode)depEdge.Target;

            if (((PhraseStructureNode)depEdge.Target).Parent == null)
            {
                // Restore dependent spine
                string phraseSpineLabel = null;
                string edgeSpineLabel   = null;
                int    empty_label      = 0;

                if (depEdge.hasLabel(graph.SymbolTables.getSymbolTable(PHRASE)))
                {
                    phraseSpineLabel = depEdge.getLabelSymbol(graph.SymbolTables.getSymbolTable(PHRASE));
                }
                if (depEdge.hasLabel(graph.SymbolTables.getSymbolTable(HEADREL)))
                {
                    edgeSpineLabel = depEdge.getLabelSymbol(graph.SymbolTables.getSymbolTable(HEADREL));
                }
                if (!ReferenceEquals(phraseSpineLabel, null) && phraseSpineLabel.Length > 0 && phraseSpineLabel[0] != EMPTY_SPINE)
                {
                    int ps = 0, es = 0, i = 0, j = 0, n = phraseSpineLabel.Length - 1, m = edgeSpineLabel.Length - 1;
                    PhraseStructureNode child = (PhraseStructureNode)depEdge.Target;
                    while (true)
                    {
                        while (i <= n && phraseSpineLabel[i] != SPINE_ELEMENT_SEPARATOR)
                        {
                            if (phraseSpineLabel[i] == QUESTIONMARK)
                            {
                                empty_label++;
                            }
                            else
                            {
                                empty_label = 0;
                            }
                            i++;
                        }
                        if (depEdge.Source.Root && i >= n)
                        {
                            dependentSpine = graph.PhraseStructureRoot;
                        }
                        else
                        {
                            dependentSpine = graph.addNonTerminalNode(++nonTerminalCounter);
                        }

                        if (empty_label != 2 && ps != i)
                        {
                            dependentSpine.addLabel(graph.SymbolTables.addSymbolTable(CAT), phraseSpineLabel.Substring(ps, i - ps));
                        }

                        empty_label = 0;
                        if (!ReferenceEquals(edgeSpineLabel, null))
                        {
                            while (j <= m && edgeSpineLabel[j] != SPINE_ELEMENT_SEPARATOR)
                            {
                                if (edgeSpineLabel[j] == QUESTIONMARK)
                                {
                                    empty_label++;
                                }
                                else
                                {
                                    empty_label = 0;
                                }
                                j++;
                            }
                        }
                        lockUpdate = true;
                        Edge.Edge e = graph.addPhraseStructureEdge(dependentSpine, child);
                        if (empty_label != 2 && es != j && !ReferenceEquals(edgeSpineLabel, null) && e != null)
                        {
                            e.addLabel(graph.SymbolTables.addSymbolTable(EDGELABEL), edgeSpineLabel.Substring(es, j - es));
                        }
                        else if (es == j)
                        {
                            e.addLabel(graph.SymbolTables.addSymbolTable(EDGELABEL), EMPTY_LABEL);
                        }

                        lockUpdate = false;
                        child      = dependentSpine;
                        if (i >= n)
                        {
                            break;
                        }
                        empty_label = 0;
                        ps          = i = i + 1;
                        es          = j = j + 1;
                    }
                }

                // Recursively attach the dependent spines to target node.
                DependencyNode target = (DependencyNode)depEdge.Target;
                for (int i = 0; i < target.LeftDependentCount; i++)
                {
                    updatePhraseStructureGraph(graph, target.getLeftDependent(i).HeadEdge, attachHeadSpineToRoot);
                }
                for (int i = target.RightDependentCount - 1; i >= 0; i--)
                {
                    updatePhraseStructureGraph(graph, target.getRightDependent(i).HeadEdge, attachHeadSpineToRoot);
                }
            }
            else
            {
                // If dependent spine already exist, then set dependentSpine to the highest nonterminal
                // of the dependent spine.
                while (dependentSpine.Parent != null && !dependentSpine.Parent.Root)
                {
                    dependentSpine = dependentSpine.Parent;
                }
            }


            PhraseStructureNode headSpine = null;

            if (((PhraseStructureNode)depEdge.Source).Parent != null)
            {
                // If head spine exist, then attach dependent spine to the head spine at the attachment level a.
                int a = 0;
                headSpine = ((PhraseStructureNode)depEdge.Source).Parent;
                if (depEdge.hasLabel(graph.SymbolTables.getSymbolTable(ATTACH)))
                {
                    try
                    {
                        a = int.Parse((depEdge.getLabelSymbol(graph.SymbolTables.getSymbolTable(ATTACH))));
                    }
                    catch (FormatException e)
                    {
                        throw new MaltChainedException(e.Message);
                    }
                }
                for (int i = 0; i < a && headSpine != null; i++)
                {
                    headSpine = headSpine.Parent;
                }

                if ((headSpine == null || headSpine == dependentSpine) && attachHeadSpineToRoot)
                {
                    headSpine = graph.PhraseStructureRoot;
                }
                if (headSpine != null)
                {
                    lockUpdate = true;
                    Edge.Edge e = graph.addPhraseStructureEdge(headSpine, dependentSpine);
                    if (depEdge.hasLabel(graph.SymbolTables.getSymbolTable(DEPREL)) && !depEdge.getLabelSymbol(graph.SymbolTables.getSymbolTable(DEPREL)).Equals(EMPTY_LABEL) & e != null)
                    {
                        e.addLabel(graph.SymbolTables.addSymbolTable(EDGELABEL), depEdge.getLabelSymbol(graph.SymbolTables.getSymbolTable(DEPREL)));
                    }
                    lockUpdate = false;
                }
            }
            else if (depEdge.Source.Root && !depEdge.Labeled)
            {
                headSpine  = graph.PhraseStructureRoot;
                lockUpdate = true;
                Edge.Edge e = graph.addPhraseStructureEdge(headSpine, dependentSpine);
                if (depEdge.hasLabel(graph.SymbolTables.getSymbolTable(DEPREL)) && !depEdge.getLabelSymbol(graph.SymbolTables.getSymbolTable(DEPREL)).Equals(EMPTY_LABEL) & e != null)
                {
                    e.addLabel(graph.SymbolTables.addSymbolTable(EDGELABEL), depEdge.getLabelSymbol(graph.SymbolTables.getSymbolTable(DEPREL)));
                }
                else
                {
                    e.addLabel(graph.SymbolTables.addSymbolTable(EDGELABEL), graph.GetDefaultRootEdgeLabelSymbol(graph.SymbolTables.getSymbolTable(DEPREL)));
                }
                lockUpdate = false;
                // Recursively attach the dependent spines to target node.
                DependencyNode target = (DependencyNode)depEdge.Target;
                for (int i = 0; i < target.LeftDependentCount; i++)
                {
                    updatePhraseStructureGraph(graph, target.getLeftDependent(i).HeadEdge, attachHeadSpineToRoot);
                }
                for (int i = target.RightDependentCount - 1; i >= 0; i--)
                {
                    updatePhraseStructureGraph(graph, target.getRightDependent(i).HeadEdge, attachHeadSpineToRoot);
                }
            }
        }
示例#7
0
        //	private void updateDependenyLabels(MappablePhraseStructureGraph graph, PhraseStructureNode top) throws MaltChainedException {
        //		if (top == null) {
        //			return;
        //		}
        //		DependencyNode head = null;
        //		DependencyNode dependent = null;
        //		if (top instanceof NonTerminalNode) {
        //			for (PhraseStructureNode node : ((NonTerminalNode)top).getChildren()) {
        //				if (node instanceof NonTerminalNode) {
        //					updateDependenyLabels(graph, node);
        //				} else {
        //					head = ((NonTerminalNode)top).getLexicalHead(headRules);
        //					dependent = (DependencyNode)node;
        //					if (head != null && dependent != null && head != dependent) {
        //						lockUpdate = true;
        //						if (dependent.hasHead()) {
        //							Edge e = dependent.getHeadEdge();
        //							labelDependencyEdge(graph, e, node);
        //						}
        //						lockUpdate = false;
        //					}
        //				}
        //			}
        //		}
        //
        //		dependent = null;
        //		if (top instanceof NonTerminalNode) {
        //			dependent = ((NonTerminalNode)top).getLexicalHead(headRules);
        //		}
        //
        //		if (dependent != null) {
        //			lockUpdate = true;
        //			if (dependent.hasHead()) {
        //				Edge e = dependent.getHeadEdge();
        //				labelDependencyEdge(graph, e, top);
        //			}
        //			lockUpdate = false;
        //		}
        //	}

//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void labelDependencyEdge(org.maltparser.core.syntaxgraph.MappablePhraseStructureGraph graph, org.maltparser.core.syntaxgraph.edge.Edge e, org.maltparser.core.syntaxgraph.node.PhraseStructureNode top) throws org.maltparser.core.exception.MaltChainedException
        private void labelDependencyEdge(MappablePhraseStructureGraph graph, Edge.Edge e, PhraseStructureNode top)
        {
            if (e == null)
            {
                return;
            }
            SymbolTableHandler symbolTables = graph.SymbolTables;

            deprel.Length  = 0;
            phrase.Length  = 0;
            headrel.Length = 0;

            e.removeLabel(symbolTables.getSymbolTable(DEPREL));
            e.removeLabel(symbolTables.getSymbolTable(HEADREL));
            e.removeLabel(symbolTables.getSymbolTable(PHRASE));
            e.removeLabel(symbolTables.getSymbolTable(ATTACH));

            int i = 0;
            SortedDictionary <string, SymbolTable> edgeLabelSymbolTables = phraseStructuretDataFormatInstance.getPhraseStructureEdgeLabelSymbolTables(symbolTableHandler);
            SortedDictionary <string, SymbolTable> nodeLabelSymbolTables = phraseStructuretDataFormatInstance.getPhraseStructureNodeLabelSymbolTables(symbolTableHandler);

            if (!top.Root)
            {
                foreach (string name in edgeLabelSymbolTables.Keys)
                {
                    if (top.hasParentEdgeLabel(symbolTables.getSymbolTable(name)))
                    {
                        deprel.Append(top.getParentEdgeLabelSymbol(symbolTables.getSymbolTable(name)));
                    }
                    else
                    {
                        deprel.Append(EMPTY_LABEL);
                    }
                    i++;
                    if (i < edgeLabelSymbolTables.Count)
                    {
                        deprel.Append(LABEL_ELEMENT_SEPARATOR);
                    }
                }
                if (deprel.Length != 0)
                {
                    e.addLabel(symbolTables.getSymbolTable(DEPREL), deprel.ToString());
                }
            }
            else
            {
                string deprelDefaultRootLabel = graph.GetDefaultRootEdgeLabelSymbol(symbolTables.getSymbolTable(DEPREL));
                if (!ReferenceEquals(deprelDefaultRootLabel, null))
                {
                    e.addLabel(symbolTables.getSymbolTable(DEPREL), deprelDefaultRootLabel);
                }
                else
                {
                    e.addLabel(symbolTables.getSymbolTable(DEPREL), EMPTY_LABEL);
                }
            }
            PhraseStructureNode tmp = (PhraseStructureNode)e.Target;

            while (tmp != top && tmp.Parent != null)
            {             // && !tmp.getParent().isRoot()) {
                i = 0;
                foreach (string name in edgeLabelSymbolTables.Keys)
                {
                    if (tmp.hasParentEdgeLabel(symbolTables.getSymbolTable(name)))
                    {
                        headrel.Append(tmp.getParentEdgeLabelSymbol(symbolTables.getSymbolTable(name)));
                    }
                    else
                    {
                        headrel.Append(EMPTY_LABEL);
                    }
                    i++;
                    if (i < edgeLabelSymbolTables.Count)
                    {
                        headrel.Append(LABEL_ELEMENT_SEPARATOR);
                    }
                }
                i = 0;
                headrel.Append(SPINE_ELEMENT_SEPARATOR);
                foreach (string name in nodeLabelSymbolTables.Keys)
                {
                    if (tmp.Parent.hasLabel(symbolTables.getSymbolTable(name)))
                    {
                        phrase.Append(tmp.Parent.getLabelSymbol(symbolTables.getSymbolTable(name)));
                    }
                    else
                    {
                        if (tmp.Parent.Root)
                        {
                            string deprelDefaultRootLabel = graph.GetDefaultRootEdgeLabelSymbol(symbolTables.getSymbolTable(PHRASE));
                            if (!ReferenceEquals(deprelDefaultRootLabel, null))
                            {
                                phrase.Append(deprelDefaultRootLabel);
                            }
                            else
                            {
                                phrase.Append(EMPTY_LABEL);
                            }
                        }
                        else
                        {
                            phrase.Append(EMPTY_LABEL);
                        }
                    }
                    i++;
                    if (i < nodeLabelSymbolTables.Count)
                    {
                        phrase.Append(LABEL_ELEMENT_SEPARATOR);
                    }
                }
                phrase.Append(SPINE_ELEMENT_SEPARATOR);
                tmp = tmp.Parent;
            }
            if (phrase.Length == 0)
            {
                headrel.Append(EMPTY_SPINE);
                phrase.Append(EMPTY_SPINE);
            }
            else
            {
                headrel.Length = headrel.Length - 1;
                phrase.Length  = phrase.Length - 1;
            }
            e.addLabel(symbolTables.getSymbolTable(HEADREL), headrel.ToString());
            e.addLabel(symbolTables.getSymbolTable(PHRASE), phrase.ToString());
            int a = 0;

            tmp = (PhraseStructureNode)e.Source;
            while (top.Parent != null && tmp.Parent != null && tmp.Parent != top.Parent)
            {
                a++;
                tmp = tmp.Parent;
            }
            e.addLabel(symbolTables.getSymbolTable(ATTACH), Convert.ToString(a));
        }
示例#8
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private void updateDependencyEdges(org.maltparser.core.syntaxgraph.MappablePhraseStructureGraph graph, org.maltparser.core.syntaxgraph.node.PhraseStructureNode top) throws org.maltparser.core.exception.MaltChainedException
        private void updateDependencyEdges(MappablePhraseStructureGraph graph, PhraseStructureNode top)
        {
            if (top == null)
            {
                return;
            }
            DependencyNode head      = null;
            DependencyNode dependent = null;

            if (top is NonTerminalNode)
            {
                foreach (PhraseStructureNode node in ((NonTerminalNode)top).Children)
                {
                    if (node is NonTerminalNode)
                    {
                        updateDependencyEdges(graph, node);
                    }
                    else
                    {
                        head      = ((NonTerminalNode)top).getLexicalHead(headRules);
                        dependent = (DependencyNode)node;
                        if (head != null && dependent != null && head != dependent)
                        {
                            lockUpdate = true;
                            if (!dependent.hasHead())
                            {
                                graph.addDependencyEdge(head, dependent);
                            }
                            else if (head != dependent.Head)
                            {
                                graph.moveDependencyEdge(head, dependent);
                            }
                            lockUpdate = false;
                        }
                    }
                }
            }

            head = null;
            if (top.Parent != null)
            {
                head = ((NonTerminalNode)top.Parent).getLexicalHead(headRules);
            }
            else if (top.Root)
            {
                head = (DependencyNode)top;
            }

            if (top is NonTerminalNode)
            {
                dependent = ((NonTerminalNode)top).getLexicalHead(headRules);
            }
            else if (!top.Root)
            {
                dependent = (DependencyNode)top;
            }
            if (head != null && dependent != null && head != dependent)
            {
                lockUpdate = true;
                if (!dependent.hasHead())
                {
                    graph.addDependencyEdge(head, dependent);
                }
                else if (head != dependent.Head)
                {
                    graph.moveDependencyEdge(head, dependent);
                }
                lockUpdate = false;
            }
        }