コード例 #1
0
        /// <summary>
        /// Проверка, что текущее подпредложение должно быть частью предыдущего подпредложения
        /// </summary>
        /// <param name="previous">предыдущее подпредложение</param>
        /// <returns>результат проверки</returns>
        private bool IsCurrentPartOfPrevious(SubSentenceInfo previous)
        {
            #region [.defense.]
            if (CurrentSubSentence.IsContainConjunction)
            {
                throw new InvalidOperationException("Current subsentence have conjunction");
            }
            #endregion

            bool result = false;
            switch (previous.SubSentence.Type)
            {
            case SubSentenceType.DanglingParticiple:
            case SubSentenceType.Participial:
                result = !(CurrentSubSentence.IsExistVerb() || CurrentSubSentence.IsExistSubject());
                break;

            case SubSentenceType.Default:
            case SubSentenceType.Subordinate:
                result = !(CurrentSubSentence.IsExistVerb() && previous.IsExistVerb()) &&
                         !((CurrentSubSentence.IsHasLingvisticEntity() || CurrentSubSentence.SubSentence.Children.Any()) &&
                           (previous.IsHasLingvisticEntity() || previous.SubSentence.Children.Any()));
                break;
            }
            return(result);
        }
コード例 #2
0
 /// <summary>
 /// Добавление деепричастия в текущее подпредложение
 /// </summary>
 /// <param name="deepr">деепричастие</param>
 private void AddDeeprToCurrent(Entity deepr)
 {
     if (CurrentSubSentence.IsExistVerb() && (CurrentType != SubSentenceType.DanglingParticiple))
     /// неверно обособленный деепричастный оборот - отсутствует левая граница
     {
         CreateNewSubSentence(deepr.Previous);
     }
     CurrentSubSentence.Verbs.Add(deepr);
     SetCurrentTypeByVerbForm(deepr);
 }
コード例 #3
0
        /// <summary>
        /// Добавление глагола в текущее подпредложение
        /// </summary>
        /// <param name="verb">глагол</param>
        private void AddVerbToCurrent(Entity verb)
        {
            /// глагол в деепричастном обороте: неверно обособленный деепричастный оборот - отсутствует правая граница
            bool isVerbInDanglingParticiple = (CurrentType == SubSentenceType.DanglingParticiple);

            if (isVerbInDanglingParticiple || (CurrentSubSentence.IsExistVerb() && !IsCompoundVerbInCurrent(verb)))
            {
                CreateNewSubSentenceByVerbForm(verb);
            }
            else
            {
                SetCurrentTypeByVerbForm(verb);
                CurrentSubSentence.Verbs.Add(verb);
            }
        }
コード例 #4
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);
        }
コード例 #5
0
        /// <summary>
        /// Установка типа подпредложения по форме глагола
        /// </summary>
        /// <param name="verb">форма глагола</param>
        private void SetCurrentTypeByVerbForm(Entity verb)
        {
            switch (verb.Type.EntityType)
            {
            case EntityType.Verb:
                if (!CurrentSubSentence.IsExistVerb() && !CurrentSubSentence.IsContainConjunction)
                {
                    CurrentSubSentence.SubSentence.Type = SubSentenceType.Default;
                }
                break;

            case EntityType.Infinitive:
                if (!CurrentSubSentence.IsExistVerb() && !CurrentSubSentence.IsContainConjunction &&
                    !CurrentSubSentence.Participles.Any())
                {
                    CurrentSubSentence.SubSentence.Type = SubSentenceType.Default;
                }
                break;

            case EntityType.Deepr:
                CurrentSubSentence.SubSentence.Type = SubSentenceType.DanglingParticiple;
                break;

            case EntityType.Participle:
                if (!CurrentSubSentence.IsExistVerb() && !CurrentSubSentence.IsContainConjunction)
                {
                    CurrentSubSentence.SubSentence.Type = SubSentenceType.Participial;
                }
                break;

                #region [.defense.]
            default:
                throw new ArgumentException("entity isn't verb");
                #endregion
            }
        }