Exemplo n.º 1
0
        private void _createFromOldFormat(XElement elementXML)
        {
            Debug.Assert(elementXML.Attribute(Consts.AttWordId) != null);
            Id = elementXML.Attribute(Consts.AttWordId).Value;

            // TODO: определить ElementType

            // ChildTreeInit
            // вершиной дерева всегда будет ID слова
            ChildWordsIds.AddChild(Id);

            // Order
            var orderNodeName = XName.Get(Consts.NodeWordOrder);
            Debug.Assert(elementXML.Element(orderNodeName) != null);
            Order = int.Parse(elementXML.Element(orderNodeName).Value);

            // Position - only in LWS
            var positionNodeName = XName.Get(Consts.NodeWordPosition);
            if (elementXML.Element(positionNodeName) != null)
                Position = int.Parse(elementXML.Element(Consts.NodeWordPosition).Value);
            else
                Position = -1;

            // Text
            var textNodeName = XName.Get(Consts.NodeWordText);
            if (elementXML.Element(textNodeName) != null)
                Text = elementXML.Element(textNodeName).Value;
            else
                Text = "";

            // Syntactic Role
            var syntacticRoleNodeName = XName.Get(Consts.NodeSyntacticRole);
            if (elementXML.Element(syntacticRoleNodeName) != null)
                SyntacticRole = SyntacticRole.ReadFromString(elementXML.Element(syntacticRoleNodeName).Value);
            else
                SyntacticRole = SyntacticRole.Undefined;

            // Surface slot
            if (elementXML.Element(Consts.NodeSurfaceSlot) != null)
                SurfaceSlot = SurfaceSlot.ReadFromString(elementXML.Element(Consts.NodeSurfaceSlot).Value);
            else
                SurfaceSlot = SurfaceSlot.Undefined;

            // grammar info
            if (elementXML.Element(Consts.NodeGrammarInfo) != null)
                GrammarInfo = new GrammarInfo(elementXML.Element(Consts.NodeGrammarInfo));
            else
            {
                GrammarInfo = new GrammarInfo();
                GrammarInfo.Case = GrammarInfoCase.Undefined;
                GrammarInfo.PartOfSpeech = GrammarInfoPartOfSpeech.Undefined;
            }

            // is restored
            if (elementXML.Element(Consts.NodeIsRestored) != null)
            {
                if (elementXML.Element(Consts.NodeIsRestored).Value == Consts.ValueTrue)
                    IsRestored = true;
                else IsRestored = false;
            }
            else
                IsRestored = false;

            //is word
            IsWord = elementXML.Attribute("type").Value == "Word";

            // syntactic parent id
            if (elementXML.Element(Consts.NodeSyntacticParent) != null)
                SyntacticParentWordId = elementXML.Element(Consts.NodeSyntacticParent).Attribute(Consts.AttWithWordId).Value;
            else
                SyntacticParentWordId = "-1";

            // controller nodes
            if (elementXML.Element(Consts.NodeHasController) != null)
            {
                foreach (var controllerItemXML in elementXML.Elements(Consts.NodeHasController))
                    ControllerNodes.Add(new Controller(controllerItemXML));
            }

            // conjucted with
            if (elementXML.Element(Consts.NodeConjuctedWith) != null)
                ConjuctedWithId = elementXML.Element(Consts.NodeConjuctedWith).Attribute(Consts.AttWithWordId).Value;
            else
                ConjuctedWithId = "-1";

            // semantic info
            SemanticInfo = new SemanticInfo(elementXML.Element(Consts.NodeSemanticInfo));
        }
Exemplo n.º 2
0
        private void _createFromAPIFormat(XElement elementXML, bool useNamespaces)
        {
            // смотрим что обрабатываем - слово или знак препинания
            var elementNode = elementXML.Element(XName.Get(Consts.NodeWord, Namespaces.NamespaceLinguistic));
            if (elementNode != null)
                ElementType = ComprenoSentenceElementType.ReadFromString(elementNode.Name.LocalName);
            else {
                elementNode = elementXML.Element(XName.Get(Consts.NodePunctuator, useNamespaces ? Namespaces.NamespaceLinguistic : ""));
                if (elementNode != null)
                    ElementType = ComprenoSentenceElementType.ReadFromString(elementNode.Element(XName.Get(Consts.NodePunctuatorType, useNamespaces ? Namespaces.NamespaceLinguistic : "")).Attribute(XName.Get(Consts.AttResourse, useNamespaces ? Namespaces.NamespaceRDF : "")).Value);
            }

            Debug.Assert(elementNode != null);
            Id = elementNode.Attribute(XName.Get(Consts.AttElementNodeId, useNamespaces ? Namespaces.NamespaceRDF : "")).Value;
            // проваливаемся на 1 уровень ниже - на нем располагаются все свойства
            elementXML = elementNode;

            var nodeIdName = XName.Get(Consts.AttElementNodeId, useNamespaces ? Namespaces.NamespaceRDF : "");

            // ChildTreeInit
            // вершиной дерева всегда будет ID слова
            ChildWordsIds.AddChild(Id);

            // Order
            var orderNodeName = XName.Get(Consts.NodeWordOrder, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            Debug.Assert(elementXML.Element(orderNodeName) != null);
            Order = int.Parse(elementXML.Element(orderNodeName).Value);

            // Text
            var textNodeName = XName.Get(Consts.NodeWordText, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            if (elementXML.Element(textNodeName) != null)
                Text = elementXML.Element(textNodeName).Value;
            else
                Text = "";

            // Lemma
            var lemmaNodeName = XName.Get(Consts.NodeLemmaName, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            if (elementXML.Element(lemmaNodeName) != null)
                Lemma = elementXML.Element(lemmaNodeName).Value;
            else
                Lemma = "";

            // Syntactic Role
            var syntacticRoleNodeName = XName.Get(Consts.NodeSyntacticRole, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            var syntacticRoleAttName = XName.Get(Consts.AttResourse, useNamespaces ? Namespaces.NamespaceRDF : "");
            if (elementXML.Element(syntacticRoleNodeName) != null)
                SyntacticRole = SyntacticRole.ReadFromString(elementXML.Element(syntacticRoleNodeName).Attribute(syntacticRoleAttName).Value);
            else
                SyntacticRole = SyntacticRole.Undefined;

            // Surface slot
            var surfaceSlotNodeName = XName.Get(Consts.NodeSurfaceSlot, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            if (elementXML.Element(surfaceSlotNodeName) != null)
                SurfaceSlot = SurfaceSlot.ReadFromString(elementXML.Element(surfaceSlotNodeName).Value);
            else
                SurfaceSlot = SurfaceSlot.Undefined;

            // grammar info
            var grammarInfoNodeName = XName.Get(Consts.NodeGrammarInfo, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            if (elementXML.Element(grammarInfoNodeName) != null)
                GrammarInfo = new GrammarInfo(elementXML.Element(grammarInfoNodeName), useNamespaces);
            else
                GrammarInfo = new GrammarInfo();

            // is restored
            var isRestoredNodeName = XName.Get(Consts.NodeIsRestored, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            if (elementXML.Element(isRestoredNodeName) != null)
                IsRestored = (elementXML.Element(isRestoredNodeName).Value == Consts.ValueTrue);
            else
                IsRestored = false;

            //is word
            IsWord = ComprenoSentenceElementType.IsWord(ElementType);

            // syntactic parent id
            var syntacticParentNodeName = XName.Get(Consts.NodeSyntacticParent, useNamespaces ? Namespaces.NamespaceLinguistic : "");

            if (elementXML.Element(syntacticParentNodeName) != null)
                SyntacticParentWordId = elementXML.Element(syntacticParentNodeName).Attribute(nodeIdName).Value;
            else
                SyntacticParentWordId = "-1";

            // controller nodes
            var controllerNodeName = XName.Get(Consts.NodeHasController, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            if (elementXML.Element(controllerNodeName) != null)
            {
                var singleControllerNodeName = XName.Get(Consts.NodeController, useNamespaces ? Namespaces.NamespaceLinguistic : "");
                foreach (var controllerItemXML in elementXML.Element(controllerNodeName).Elements(singleControllerNodeName))
                    ControllerNodes.Add(new Controller(controllerItemXML, useNamespaces));
            }

            // conjucted with
            var conjuctedWithNodeName = XName.Get(Consts.NodeConjuctedWith, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            if (elementXML.Element(conjuctedWithNodeName) != null)
                ConjuctedWithId = elementXML.Element(conjuctedWithNodeName).Attribute(nodeIdName).Value;
            else
                ConjuctedWithId = "-1";

            // semantic info --> lexical class predefined
            var semanticInfoNodeName = XName.Get(Consts.NodeSemanticInfo, useNamespaces ? Namespaces.NamespaceLinguistic : "");
            SemanticInfo = new SemanticInfo(elementXML.Element(semanticInfoNodeName), useNamespaces);
        }