Пример #1
0
        /// <summary>
        /// Given the root Element for a SemgrexPattern (SSURGEON_ELEM_TAG), converts
        /// it into its corresponding SemgrexPattern object.
        /// </summary>
        /// <exception cref="System.Exception"/>
        public static SsurgeonPattern SsurgeonPatternFromXML(IElement elt)
        {
            string          uid            = GetTagText(elt, SsurgeonPattern.UidElemTag);
            string          notes          = GetTagText(elt, SsurgeonPattern.NotesElemTag);
            string          semgrexString  = GetTagText(elt, SsurgeonPattern.SemgrexElemTag);
            SemgrexPattern  semgrexPattern = SemgrexPattern.Compile(semgrexString);
            SsurgeonPattern retPattern     = new SsurgeonPattern(uid, semgrexPattern);

            retPattern.SetNotes(notes);
            INodeList editNodes = elt.GetElementsByTagName(SsurgeonPattern.EditListElemTag);

            for (int i = 0; i < editNodes.GetLength(); i++)
            {
                INode node = editNodes.Item(i);
                if (node.GetNodeType() == NodeConstants.ElementNode)
                {
                    IElement editElt = (IElement)node;
                    string   editVal = GetEltText(editElt);
                    retPattern.AddEdit(Edu.Stanford.Nlp.Semgraph.Semgrex.Ssurgeon.Ssurgeon.ParseEditLine(editVal));
                }
            }
            // If predicate available, parse
            IElement predElt = GetFirstTag(elt, SsurgeonPattern.PredicateTag);

            if (predElt != null)
            {
                ISsurgPred pred = AssemblePredFromXML(GetFirstChildElement(predElt));
                retPattern.SetPredicate(pred);
            }
            return(retPattern);
        }
Пример #2
0
        /// <summary>
        /// Constructs a
        /// <c>SsurgPred</c>
        /// structure from file, given the root element.
        /// </summary>
        /// <exception cref="System.Exception"/>
        public static ISsurgPred AssemblePredFromXML(IElement elt)
        {
            string eltName = elt.GetTagName();

            switch (eltName)
            {
            case SsurgeonPattern.PredicateAndTag:
            {
                SsurgAndPred andPred = new SsurgAndPred();
                foreach (IElement childElt in GetChildElements(elt))
                {
                    ISsurgPred childPred = AssemblePredFromXML(childElt);
                    andPred.Add(childPred);
                    return(andPred);
                }
                break;
            }

            case SsurgeonPattern.PredicateOrTag:
            {
                SsurgOrPred orPred = new SsurgOrPred();
                foreach (IElement childElt_1 in GetChildElements(elt))
                {
                    ISsurgPred childPred = AssemblePredFromXML(childElt_1);
                    orPred.Add(childPred);
                    return(orPred);
                }
                break;
            }

            case SsurgeonPattern.PredWordlistTestTag:
            {
                string id         = elt.GetAttribute(SsurgeonPattern.PredIdAttr);
                string resourceID = elt.GetAttribute("resourceID");
                string typeStr    = elt.GetAttribute("type");
                string matchName  = GetEltText(elt).Trim();
                // node name to match on
                if (matchName == null)
                {
                    throw new Exception("Could not find match name for " + elt);
                }
                if (id == null)
                {
                    throw new Exception("No ID attribute for element = " + elt);
                }
                return(new WordlistTest(id, resourceID, typeStr, matchName));
            }
            }
            // Not a valid node, error out!
            throw new Exception("Invalid node encountered during Ssurgeon predicate processing, node name=" + eltName);
        }
Пример #3
0
 public virtual void SetPredicate(ISsurgPred predicateTest)
 {
     this.predicateTest = predicateTest;
 }