Пример #1
0
        /// <summary>
        /// Проверка, что заданная сущность - дочернее неопределенное местоимение
        /// </summary>
        /// <param name="entity">сущность</param>
        /// <returns>результат проверки</returns>
        private bool IsChildIndefinitePronoun(Entity entity)
        {
            UnitTextBase next = entity.GetNonEmptyNext();

            return(entity.IsType(EntityType.Pronoun) && DictionaryResource.IsIndefinitePronoun(entity.Text) &&
                   (next != null) && (next.UnitTextType == UnitTextType.ENTITY));
        }
Пример #2
0
        /// <summary>
        /// Добавление союза в текущее подпредложение
        /// </summary>
        /// <param name="conjunction">союз</param>
        public void AddConjunctionToCurrent(Entity conjunction)
        {
            if (DictionaryResource.IsHomogeneousConjunction(conjunction.Text))
            {
                return;
            }
            UnitTextBase previous = conjunction.GetNonEmptyPrevious();

            if ((previous != null) && previous.IsSeparator(TireForms) && (CurrentSubSentence.StartUnit != previous))
            {
                CreateNewSubSentence(previous.Previous);
            }
            if (CurrentSubSentence.IsContainConjunction)
            {
                if (previous.IsEntity && IsConjunction((Entity)previous))
                {
                    CreateNewSubSentence(previous);
                }
                else
                {
                    return;
                }
            }
            if (CurrentType != SubSentenceType.DanglingParticiple)
            {
                CurrentSubSentence.IsContainConjunction = true;
                CurrentSubSentence.SubSentence.Type     = ((ConjunctionEntityInfo)conjunction.EntityInfo).ConjunctionType;
            }
        }
 protected override bool IsSubSentence(string text, bool isFullSentence, bool isLast)
 {
     if (isFullSentence)
     {
         return(false);
     }
     return(DictionaryResource.IsParenthesis(isLast ? text.TrimEnd(SentenceEnd) : text));
 }
Пример #4
0
        /// <summary>
        /// Проверка, что между двумя юнитами есть однородный союз
        /// </summary>
        /// <param name="begin">начало интервала</param>
        /// <param name="end">конец интервала</param>
        /// <returns>результат проверки</returns>
        private bool IsHomogeneousConjunctionBetween(UnitTextBase begin, UnitTextBase end)
        {
            UnitTextBase current = begin;

            while ((current != null) && (current != end))
            {
                if (DictionaryResource.IsHomogeneousConjunction(current.Text))
                {
                    return(true);
                }
                current = current.GetNonEmptyNext();
            }
            return(false);
        }
        protected override IEnumerable <UnitTextBase> TransformUnitsInSequence(IList <UnitTextBase> units)
        {
            List <UnitTextBase> result = new List <UnitTextBase>();

            foreach (UnitTextBase unit in units)
            {
                var separators = DictionaryResource.SelectIndividualTextItems(unit).ToArray();
                if (separators.Any())
                {
                    result.AddRange(unit.SplitUnit(separators));
                }
                else
                {
                    result.Add(unit);
                }
            }
            return(result);
        }
Пример #6
0
        /// <summary>
        /// Проверка, что текущее подпредложение должно быть частью предыдущего подпредложения
        /// </summary>
        /// <param name="previous">предыдущее подпредложение</param>
        /// <param name="lastAdded">последнее добавленное подпредложение</param>
        /// <returns>результат проверки</returns>
        private bool IsCurrentPartOfPrevious(SubSentenceInfo previous, SubSentenceInfo lastAdded)
        {
            if ((previous != null) && !CurrentSubSentence.IsExistSubject())
            {
                bool isPossiblePart = true;
                if (previous == lastAdded)
                {
                    UnitTextBase firstUnit = CurrentSubSentence.SubSentence.Units.FirstOrDefault(_ => !_.IsEmptyText());
                    if ((firstUnit != null) && !DictionaryResource.IsHomogeneousConjunction(firstUnit.Text))
                    /// подпредложения не будут соединены
                    {
                        isPossiblePart = false;

                        UnitTextBase secondUnit = firstUnit.GetNonEmptyNext();
                        if (IsAnyType(previous.SubSentence, SubSentenceType.Subordinate) && !(CurrentSubSentence.IsContainConjunction ||
                                                                                              (firstUnit.IsSeparator(",") && (secondUnit != null) && DictionaryResource.IsHomogeneousConjunction(secondUnit.Text))))
                        /// не пытаемся восстановить подлежащее
                        {
                            return(false);
                        }
                    }
                }

                if (IsAnyType(previous.SubSentence, SubSentenceType.Default, SubSentenceType.Subordinate))
                {
                    if (IsCurrentSubject(previous.SubSentence.Subject))
                    {
                        if (CurrentSubSentence.IsContainConjunction || (CurrentSubSentence.IsExistVerb() && previous.IsExistVerb()))
                        {
                            CurrentSubSentence.SubSentence.set_SubjectSubSentence(previous.SubSentence);
                        }
                        else
                        {
                            return(isPossiblePart);
                        }
                    }
                }
                else if (!CurrentSubSentence.IsContainConjunction)
                {
                    return(isPossiblePart && IsCurrentPartOfPrevious(previous));
                }
            }
            return(false);
        }
Пример #7
0
 /// <summary>
 /// Создание нового подпредложения по форме глагола
 /// </summary>
 /// <param name="verbForm">форма глагола</param>
 private void CreateNewSubSentenceByVerbForm(Entity verbForm)
 {
     #region [.defense.]
     if (verbForm.UnitTextType != UnitTextType.VERB)
     {
         throw new ArgumentException("entity isn't verbForm");
     }
     #endregion
     Entity       lastVerb = CurrentSubSentence.Verbs.Last();
     UnitTextBase current  = verbForm;
     while (current.Previous != lastVerb)
     {
         if (DictionaryResource.IsHomogeneousConjunction(current.Text) || current.IsSeparator(TireForms) || current.IsSeparator(","))
         {
             break;
         }
         current = current.Previous;
     }
     CreateNewSubSentence(current.Previous);
     AddVerbFormToCurrent(verbForm);
 }
        protected override IEnumerable <UnitTextBase> TransformUnitsInSequence(IList <UnitTextBase> units)
        {
            List <UnitTextBase> result = new List <UnitTextBase>();

            var                conjunctionList         = DictionaryResource.SelectConjunctions(units);
            int                currentConjunctionIndex = 0;
            Conjunction        currentConjunction      = GetCurrentConjunction(conjunctionList, currentConjunctionIndex);
            ConjunctionBuilder builder = new ConjunctionBuilder();

            foreach (UnitTextBase unit in units)
            {
                int position = 0;
                while (currentConjunction != null)
                {
                    if ((currentConjunction.StartPosition < unit.PositionInfo.End) && (builder.Conjunction == null))
                    /// начало союза
                    {
                        builder.Conjunction = currentConjunction;
                        position            = builder.AddLeftConjunctionBorder(result, unit, position);
                    }
                    if (currentConjunction.EndPosition <= unit.PositionInfo.End)
                    /// конец союза
                    {
                        position           = builder.AddAndClearConjunction(result, unit, position);
                        currentConjunction = GetCurrentConjunction(conjunctionList, ++currentConjunctionIndex);
                        continue;
                    }
                    if (builder.Conjunction != null)
                    {
                        position = builder.AppendConjunctionPart(unit.Text, position);
                    }
                    break;
                }
                AddUnmarkedPart(result, unit, position);
            }
            return(result);
        }
Пример #9
0
 /// <summary>
 /// Проверка, что заданное подпредложение - обстоятельственный оборот
 /// </summary>
 /// <param name="subSentence">подпредложение</param>
 /// <returns>результат проверки</returns>
 private bool IsAdjunctPhrase(SubSentence subSentence)
 {
     return(DictionaryResource.IsStartWithAdjunct(subSentence.Units.GetText()));
 }