/// <summary>
        /// Создание подпредложения из xml-элемента
        /// </summary>
        /// <param name="subSentence">xml-элемент</param>
        /// <param name="language">язык предложения</param>
        /// <returns>подпредложение</returns>
        private static SubSentence SubSentenceFromXElement(XElement subSentence, string language)
        {
            #region [.defense.]
            if (!subSentence.IsName(UnitTextType.SUB_SENT))
            {
                throw new ArgumentException("element isn't SUB_SENT");
            }
            #endregion
            SubSentenceType type   = (SubSentenceType)Enum.Parse(typeof(SubSentenceType), subSentence.GetAttributeValue(RDF.Attribute.Type));
            SubSentence     result = new SubSentence(type, _positionInSentence);

            switch (type)
            {
            case SubSentenceType.AdjunctPhrase:
            case SubSentenceType.DanglingParticiple:
            case SubSentenceType.Default:
            case SubSentenceType.Introductory:
            case SubSentenceType.Participial:
            case SubSentenceType.Subordinate:
                SimpleSubSentenceFromXElement(result, subSentence, language);
                break;

            case SubSentenceType.ApproximatingForceps:
            case SubSentenceType.DirectSpeech:
                SubTextFromXElement(result, subSentence, language);
                break;

                #region [.defense.]
            default:
                throw new InvalidOperationException("Unknown subSentence type");
                #endregion
            }
            return(result);
        }
Exemple #2
0
        /// <summary>
        /// Установка субъекта для текущего подпредложения
        /// </summary>
        /// <param name="parent">родительское подпредложение</param>
        private void SetSubjectInCurrent(SubSentenceInfo parent)
        {
            SubSentenceType currentType = CurrentSubSentence.SubSentence.Type;

            if (currentType == SubSentenceType.DanglingParticiple)
            {
                SetCurrentDanglingParticipleDeterminer(parent);
            }
            else if (currentType == SubSentenceType.Participial)
            {
                SetCurrentParticipialDeterminer(parent);
            }
            else
            {
                SetCurrentSubject();
            }
        }
 /// <summary>
 /// Проверка, что заданный текст является союзом заданного типа
 /// </summary>
 /// <param name="conjunction">текст</param>
 /// <param name="type">тип союза</param>
 /// <returns>результат проверки</returns>
 private static bool IsConjunctionCurrentType(string text, SubSentenceType type)
 {
     return(_conjunctionDict[type].Any(_ => _ == text));
 }
 /// <summary>
 /// Проверка, что заданный текст является союзом заданного типа
 /// </summary>
 /// <param name="conjunction">текст</param>
 /// <param name="type">тип союза</param>
 /// <returns>результат проверки</returns>
 public static bool IsConjunctionType(string text, SubSentenceType type)
 {
     return(IsConjunctionCurrentType(new SimpleStringBuilder(text).LowerValue, type));
 }
        /// <summary>
        /// Создание сущности из xml-элемента
        /// </summary>
        /// <param name="entity">xml-элемент</param>
        /// <param name="language">язык предложения</param>
        /// <param name="subSentenceType">тип подпредложения</param>
        /// <returns>сущность</returns>
        private static Entity EntityFromXElement(XElement entity, string language, SubSentenceType subSentenceType)
        {
            TextEntity textEntity = new TextEntity();

            textEntity.Type     = entity.GetAttributeValue(RDF.Attribute.Type);
            textEntity.Value    = entity.GetAttributeValue(RDF.Attribute.Value);
            textEntity.Text     = GetFullValue(entity);
            textEntity.Language = language;
            textEntity.Start    = _positionInSentence;

            textEntity.IsPseudoPlace = entity.IsContainAttribute(RDF.Attribute.PseudoPlace);
            if (entity.IsContainAttribute(RDF.Attribute.FirstName))
            {
                textEntity.FirstName = entity.GetAttributeValue(RDF.Attribute.FirstName);
            }
            if (entity.IsContainAttribute(RDF.Attribute.MiddleName))
            {
                textEntity.MiddleName = entity.GetAttributeValue(RDF.Attribute.MiddleName);
            }
            if (entity.IsContainAttribute(RDF.Attribute.LastName))
            {
                textEntity.LastName = entity.GetAttributeValue(RDF.Attribute.LastName);
            }
            if (entity.IsContainAttribute(RDF.Attribute.MorphoInformation))
            {
                string morpho = entity.GetAttributeValue(RDF.Attribute.MorphoInformation);
                if (!string.IsNullOrEmpty(morpho))
                {
                    textEntity.MorphoInfo = morpho.Split(RDF.ValueSeparator).ToList();
                }
            }
            if (entity.IsContainAttribute(RDF.Attribute.MainNoun))
            {
                textEntity.MainNoun = entity.GetAttributeValue(RDF.Attribute.MainNoun);
            }
            if (entity.IsContainAttribute(RDF.Attribute.Post))
            {
                textEntity.Post = entity.GetAttributeValue(RDF.Attribute.Post);
            }
            if (entity.IsContainAttribute(RDF.Attribute.Prefix))
            {
                textEntity.MainNounPrefix = entity.GetAttributeValue(RDF.Attribute.Prefix);
            }
            if (entity.IsContainAttribute(RDF.Attribute.Adjectives))
            {
                textEntity.Adjectives = entity.GetAttributeValue(RDF.Attribute.Adjectives).Split(RDF.ValueSeparator).ToList();
            }

            Entity result = textEntity.CreateEntity();

            if (result.IsType(EntityType.Conjunction))
            {
                ((ConjunctionEntityInfo)result.EntityInfo).ConjunctionType = subSentenceType;
            }
            if (entity.IsContainAttribute(RDF.Attribute.Role))
            {
                result.Role = (EntityRole)Enum.Parse(typeof(EntityRole), entity.GetAttributeValue(RDF.Attribute.Role));
            }
            foreach (XElement element in entity.Elements())
            {
                if (IsEntity(element))
                {
                    result.AddChild(EntityFromXElement(element, language, subSentenceType));
                }
                else
                {
                    _positionInSentence += GetFullValue(element).Length;
                }
            }
            _sentenceEntities.Add(entity.GetAttributeValue(RDF.Attribute.ID), result);
            return(result);
        }
 public ConjunctionEntityInfo(SubSentenceType conjunctionType)
     : base(EntityType.Conjunction)
 {
     ConjunctionType = conjunctionType;
 }
Exemple #7
0
 public SubSentence(SubSentenceType type, int startPosition)
 {
     Type          = type;
     Children      = new SubSentence[] {};
     StartPosition = startPosition;
 }