Exemplo n.º 1
0
        //-------------------------------------------------------------------------
        /// <summary>
        /// Parses the tree from the StAX stream reader, capturing references.
        /// <para>
        /// The reader should be created using the factory returned from <seealso cref="#xmlInputFactory()"/>.
        /// </para>
        /// <para>
        /// This method supports capturing attribute references, such as an id/href pair.
        /// Wherever the parser finds an attribute with the specified name, the element is added
        /// to the specified map. Note that the map is mutated.
        ///
        /// </para>
        /// </summary>
        /// <param name="reader">  the StAX stream reader, positioned at or before the element to be parsed </param>
        /// <param name="refAttr">  the attribute name that should be parsed as a reference, null if not applicable </param>
        /// <param name="refs">  the mutable map of references to update, null if not applicable </param>
        /// <returns> the parsed element </returns>
        /// <exception cref="IllegalArgumentException"> if the input cannot be parsed </exception>
        private static XmlElement parse(XMLStreamReader reader, string refAttr, IDictionary <string, XmlElement> refs)
        {
            try
            {
                // parse start element
                string elementName = parseElementName(reader);
                ImmutableMap <string, string> attrs = parseAttributes(reader);

                // parse children or content
                ImmutableList.Builder <XmlElement> childBuilder = ImmutableList.builder();
                string content = "";
                int    @event  = reader.next();
                while (@event != XMLStreamConstants.END_ELEMENT)
                {
                    switch (@event)
                    {
                    // parse child when start element found
                    case XMLStreamConstants.START_ELEMENT:
                        childBuilder.add(parse(reader, refAttr, refs));
                        break;

                    // append content when characters found
                    // since XMLStreamReader has IS_COALESCING=true means there should only be one content call
                    case XMLStreamConstants.CHARACTERS:
                    case XMLStreamConstants.CDATA:
                        content += reader.Text;
                        break;

                    default:
                        break;
                    }
                    @event = reader.next();
                }
                ImmutableList <XmlElement> children = childBuilder.build();
                XmlElement parsed = children.Empty ? XmlElement.ofContent(elementName, attrs, content) : XmlElement.ofChildren(elementName, attrs, children);
                string     @ref   = attrs.get(refAttr);
                if (!string.ReferenceEquals(@ref, null))
                {
                    refs[@ref] = parsed;
                }
                return(parsed);
            }
            catch (XMLStreamException ex)
            {
                throw new System.ArgumentException(ex);
            }
        }
Exemplo n.º 2
0
        // find the start element and parses the name
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: private static String parseElementName(javax.xml.stream.XMLStreamReader reader) throws javax.xml.stream.XMLStreamException
        private static string parseElementName(XMLStreamReader reader)
        {
            int @event = reader.EventType;

            while (@event != XMLStreamConstants.START_ELEMENT)
            {
                @event = reader.next();
            }
            return(reader.LocalName);
        }
Exemplo n.º 3
0
//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
//ORIGINAL LINE: public boolean readSentence(org.maltparser.core.syntaxgraph.TokenStructure syntaxGraph) throws org.maltparser.core.exception.MaltChainedException
        public virtual bool readSentence(ITokenStructure syntaxGraph)
        {
            if (syntaxGraph == null || !(syntaxGraph is PhraseStructure))
            {
                return(false);
            }
            syntaxGraph.Clear();
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final org.maltparser.core.syntaxgraph.PhraseStructure phraseStructure = (org.maltparser.core.syntaxgraph.PhraseStructure)syntaxGraph;
            PhraseStructure     phraseStructure = (PhraseStructure)syntaxGraph;
            PhraseStructureNode parent          = null;
            PhraseStructureNode child           = null;

            //		if (header == null) {
            //			header = new TigerXMLHeader(syntaxGraph.getSymbolTables());
            //		}

            try
            {
                while (true)
                {
                    int @event = reader.next();
                    if (@event == XMLStreamConstants.START_ELEMENT)
                    {
                        if (reader.LocalName.length() == 0)
                        {
                            continue;
                        }
                        if (reader.LocalName.charAt(0) == 'e')
                        {
                            // e -> edge, edgelabel
                            if (reader.LocalName.length() == 4)
                            {                             //edge
                                int childid  = -1;
                                int indexSep = reader.getAttributeValue(null, "idref").IndexOf('_');

                                try
                                {
                                    if (indexSep != -1)
                                    {
                                        childid = int.Parse(reader.getAttributeValue(null, "idref").substring(indexSep + 1));
                                    }
                                    else
                                    {
                                        childid = int.Parse(reader.getAttributeValue(null, "idref"));
                                    }
                                    if (childid == -1)
                                    {
                                        throw new SyntaxGraphException("The tiger reader couldn't recognize the idref attribute '" + reader.getAttributeValue(null, "idref") + "' of the edge element. ");
                                    }
                                }
                                catch (System.FormatException)
                                {
                                    throw new SyntaxGraphException("The tiger reader couldn't recognize the idref attribute '" + reader.getAttributeValue(null, "idref") + "' of the edge element. ");
                                }

                                if (childid < START_ID_OF_NONTERMINALS)
                                {
                                    child = phraseStructure.GetTokenNode(childid);
                                }
                                else
                                {
                                    child = phraseStructure.getNonTerminalNode(childid - START_ID_OF_NONTERMINALS + 1);
                                }

                                Edge.Edge e = phraseStructure.addPhraseStructureEdge(parent, child);
                                SortedDictionary <string, SymbolTable> inputTables = dataFormatInstance.getPhraseStructureEdgeLabelSymbolTables(phraseStructure.SymbolTables);
                                foreach (string name in inputTables.Keys)
                                {
                                    e.addLabel(inputTables[name], reader.getAttributeValue(null, name.ToLower()));
                                }
                            }
                            else if (reader.LocalName.Equals("edgelabel"))
                            {                             // edgelabel
                                //							domain = Domain.EL;
                            }
                        }
                        else if (reader.LocalName.charAt(0) == 'n')
                        {
                            // n -> nt, nonterminals, name
                            if (reader.LocalName.length() == 2)
                            {                             // nt
//JAVA TO C# CONVERTER WARNING: The original Java variable was marked 'final':
//ORIGINAL LINE: final String id = reader.getAttributeValue(null, "id");
                                string id = reader.getAttributeValue(null, "id");
                                if (graphRootID.Length == id.Length && graphRootID.ToString().Equals(id))
                                {
                                    parent = phraseStructure.PhraseStructureRoot;
                                }
                                else
                                {
                                    int index = id.IndexOf('_');
                                    if (index != -1)
                                    {
                                        parent = phraseStructure.addNonTerminalNode(int.Parse(id.Substring(index + 1)) - START_ID_OF_NONTERMINALS + 1);
                                    }
                                }
                                SortedDictionary <string, SymbolTable> inputTables = dataFormatInstance.getPhraseStructureNodeLabelSymbolTables(phraseStructure.SymbolTables);
                                foreach (string name in inputTables.Keys)
                                {
                                    parent.addLabel(inputTables[name], reader.getAttributeValue(null, name.ToLower()));
                                }
                            }
                            else if (reader.LocalName.Equals("name"))
                            {                             // name
                                //							elementContent.setLength(0);
                                //							collectChar = true;
                            }
                        }
                        else if (reader.LocalName.charAt(0) == 't')
                        {
                            // t -> t, terminals
                            if (reader.LocalName.length() == 1)
                            {                             // t
                                SortedDictionary <string, SymbolTable> inputTables = dataFormatInstance.getInputSymbolTables(phraseStructure.SymbolTables);
                                child = syntaxGraph.AddTokenNode();
                                foreach (string name in inputTables.Keys)
                                {
                                    child.addLabel(inputTables[name], reader.getAttributeValue(null, name.ToLower()));
                                }
                            }
                        }
                        else if (reader.LocalName.charAt(0) == 's')
                        {
                            // s -> subcorpus, secedge, s, secedgelabel
                            if (reader.LocalName.length() == 1)
                            {                             // s
                                string id        = reader.getAttributeValue(null, "id");
                                bool   indexable = false;
                                int    index     = -1;
                                if (!ReferenceEquals(id, null) && id.Length > 0)
                                {
                                    for (int i = 0, n = id.Length; i < n; i++)
                                    {
                                        if (char.IsDigit(id[i]))
                                        {
                                            if (index == -1)
                                            {
                                                index = i;
                                            }
                                            indexable = true;
                                        }
                                    }
                                }
                                if (indexable)
                                {
                                    phraseStructure.SentenceID = int.Parse(id.Substring(index));
                                }
                                else
                                {
                                    phraseStructure.SentenceID = sentenceCount + 1;
                                }
                            }
                        }
                        else if (reader.LocalName.charAt(0) == 'v')
                        {
                            // v -> variable, value
                            //						if (reader.getLocalName().equals("value")) {
                            //							valueName.setLength(0);
                            //							valueName.append(reader.getAttributeValue(null, "name"));
                            //							elementContent.setLength(0);
                            //							collectChar = true;
                            //						}
                        }
                        else
                        {
                            //						 a -> annotation, author
                            //						 b -> body
                            //						 c -> corpus
                            //						 d -> date, description,
                            //						 f -> feature, format
                            //						 g -> graph
                            //						 h -> head, history
                            //						 m -> matches, match
                            if (reader.LocalName.Equals("graph"))
                            {
                                graphRootID.Length = 0;
                                graphRootID.Append(reader.getAttributeValue(null, "root"));
                            }
                            else if (reader.LocalName.Equals("corpus"))
                            {
                                //							header.setCorpusID(reader.getAttributeValue(null, "id"));
                                //							header.setCorpusID(reader.getAttributeValue(null, "version"));
                            }
                            else if (reader.LocalName.Equals("feature"))
                            {
                                //							if (header != null) {
                                //								currentFeatureName.setLength(0);
                                //								currentFeatureName.append(reader.getAttributeValue(null, "name"));
                                //								header.addFeature(reader.getAttributeValue(null, "name"), reader.getAttributeValue(null, "domain"));
                                //							}
                                //							domain = Domain.valueOf(reader.getAttributeValue(null, "domain"));
                            }
                            else if (reader.LocalName.Equals("secedgelabel"))
                            {
                                //							domain = Domain.SEL;
                            }
                            else if (reader.LocalName.Equals("author"))
                            {
                                //							elementContent.setLength(0);
                                //							collectChar = true;
                            }
                            else if (reader.LocalName.Equals("date"))
                            {
                                //							elementContent.setLength(0);
                                //							collectChar = true;
                            }
                            else if (reader.LocalName.Equals("description"))
                            {
                                //							elementContent.setLength(0);
                                //							collectChar = true;
                            }
                            else if (reader.LocalName.Equals("format"))
                            {
                                //							elementContent.setLength(0);
                                //							collectChar = true;
                            }
                            else if (reader.LocalName.Equals("history"))
                            {
                                //							elementContent.setLength(0);
                                //							collectChar = true;
                            }
                        }
                    }
                    else if (@event == XMLStreamConstants.END_ELEMENT)
                    {
                        if (reader.LocalName.length() == 0)
                        {
                            continue;
                        }
                        if (reader.LocalName.charAt(0) == 'e')
                        {
                            // e -> edge, edgelabel
                        }
                        else if (reader.LocalName.charAt(0) == 'n')
                        {
                            // n -> nt, nonterminals, name
                            if (reader.LocalName.Equals("nt"))
                            {
                                ntid.Length = 0;
                            }
                            else if (reader.LocalName.Equals("nonterminals"))
                            {
                                if (phraseStructure.NTokenNode() == 1 && phraseStructure.nNonTerminals() == 0 && ((NonTerminalNode)phraseStructure.PhraseStructureRoot).nChildren() == 0)
                                {
                                    Edge.Edge e = phraseStructure.addPhraseStructureEdge(phraseStructure.PhraseStructureRoot, phraseStructure.GetTokenNode(1));
                                    SortedDictionary <string, SymbolTable> inputTables = dataFormatInstance.getPhraseStructureEdgeLabelSymbolTables(phraseStructure.SymbolTables);
                                    foreach (string name in inputTables.Keys)
                                    {
                                        e.addLabel(inputTables[name], "--");
                                    }
                                }
                            }
                            //						else if (reader.getLocalName().equals("name")) {
                            //							if (header != null) {
                            //								header.setMetaName(elementContent.toString());
                            //							}
                            //							collectChar = false;
                            //						}
                        }
                        else if (reader.LocalName.charAt(0) == 't')
                        {
                            // t -> t, terminals
                        }
                        else if (reader.LocalName.charAt(0) == 's')
                        {
                            // s -> subcorpus, secedge, s, secedgelabel
                            if (reader.LocalName.Equals("s"))
                            {
                                if (syntaxGraph.HasTokens())
                                {
                                    sentenceCount++;
                                }
                                if (syntaxGraph is MappablePhraseStructureGraph)
                                {
                                    ((MappablePhraseStructureGraph)syntaxGraph).Mapping.updateDependenyGraph(((MappablePhraseStructureGraph)syntaxGraph), ((PhraseStructure)syntaxGraph).PhraseStructureRoot);
                                }
                                return(true);
                            }
                        }
                        else if (reader.LocalName.charAt(0) == 'v')
                        {
                            // v -> variable, value
                            //						if (reader.getLocalName().equals("value")) {
                            //							if (header != null) {
                            //								if (domain == Domain.T || domain == Domain.NT || domain == Domain.FREC) {
                            //									header.addFeatureValue(currentFeatureName.toString(), valueName.toString(), elementContent.toString());
                            //								} else if (domain == Domain.EL) {
                            //									header.addEdgeLabelValue(valueName.toString(), elementContent.toString());
                            //								} else if (domain == Domain.SEL) {
                            //									header.addSecEdgeLabelValue(valueName.toString(), elementContent.toString());
                            //								}
                            //							}
                            //							collectChar = false;
                            //						}
                        }
                        else
                        {
                            //						 a -> annotation, author
                            //						 b -> body
                            //						 c -> corpus
                            //						 d -> date, description,
                            //						 f -> feature, format
                            //						 g -> graph
                            //						 h -> head, history
                            //						 m -> matches, match
                            if (reader.LocalName.Equals("body"))
                            {
                                //sentence = dataStructures.getSentence();
                                //phraseTree = dataStructures.getInPhraseTree();
                                //sentence.clear();
                                //phraseTree.clear();
                                //dataStructures.setLastProcessObject(true);
                            }
                            else if (reader.LocalName.Equals("author"))
                            {
                                //							if (header != null) {
                                //								header.setMetaAuthor(elementContent.toString());
                                //							}
                                //							collectChar = false;
                            }
                            else if (reader.LocalName.Equals("date"))
                            {
                                //							if (header != null) {
                                //								header.setMetaInDate(elementContent.toString());
                                //							}
                                //							collectChar = false;
                            }
                            else if (reader.LocalName.Equals("description"))
                            {
                                //							if (header != null) {
                                //								header.setMetaDescription(elementContent.toString());
                                //							}
                                //							collectChar = false;
                            }
                            else if (reader.LocalName.Equals("format"))
                            {
                                //							if (header != null) {
                                //								header.setMetaFormat(elementContent.toString());
                                //							}
                                //							collectChar = false;
                            }
                            else if (reader.LocalName.Equals("history"))
                            {
                                //							if (header != null) {
                                //								header.setMetaHistory(elementContent.toString());
                                //							}
                                //							collectChar = false;
                            }                             /* else if (reader.getLocalName().equals("annotation")) {
                                                           *    if (header != null) {
                                                           *            System.out.println(header.toTigerXML());
                                                           *    }
                                                           *    collectChar = false;
                                                           * } */
                        }
                    }
                    else if (@event == XMLStreamConstants.END_DOCUMENT)
                    {
                        if (syntaxGraph.HasTokens())
                        {
                            sentenceCount++;
                        }
                        if (cIterations < nIterations)
                        {
                            cIterations++;
                            reopen();
                            return(true);
                        }
                        return(false);
                    }
                    else if (@event == XMLStreamConstants.CHARACTERS)
                    {
                        //					if (collectChar) {
                        //						char[] ch = reader.getTextCharacters();
                        //						final int size = reader.getTextStart()+reader.getTextLength();
                        //						for (int i = reader.getTextStart(); i < size; i++) {
                        //							elementContent.append(ch[i]);
                        //						}
                        //					}
                    }
                }
            }
            catch (XMLStreamException e)
            {
                throw new DataFormatException("", e);
            }
        }