/// <summary>
        /// Определение является ли контент частью данного предложения и
        /// распределение сущностей между предложением и контентов в противном случае
        /// </summary>
        /// <param name="contentIndex">индекс контента</param>
        /// <param name="sentenceInfo">информация о корректируемом предложении</param>
        /// <param name="contentInfo">информация о корректируемом контенте</param>
        /// <param name="entityIndex">индекс сущности</param>
        private void DecomposeEntitiesAndContentToSentence(int contentIndex, CorrectedSentenceInfo sentenceInfo,
                                                           CorrectedContentInfo contentInfo, ref int entityIndex)
        {
            ChildContent  content = Children[contentIndex];
            int           notPotencialPartsShift = contentInfo.IsOnlyPotencialParts ? GetFullContentsLength(contentIndex, true) : 0;
            int           contentStartPosition   = content.StartPosition - notPotencialPartsShift;
            int           contentEndPosition     = contentStartPosition + content.GetFullLength();
            List <Entity> contentEntities        = new List <Entity>();
            bool          isShiftedContent       = !contentInfo.IsOnlyPotencialParts || content.IsPotencialParentPart;
            bool          isRemovedContent       = false;

            if (isShiftedContent)
            {
                for (; entityIndex < sentenceInfo.SentenceItems.Entities.Length; ++entityIndex)
                {
                    Entity entity = sentenceInfo.SentenceItems.Entities[entityIndex];
                    if (entity.PositionInfo.End <= contentStartPosition)
                    {
                        AddEntity(entity, contentInfo.CurrentEntityShift);
                        continue;
                    }
                    else if (entity.PositionInfo.Start >= contentEndPosition)
                    {
                        break;
                    }
                    else if ((entity.PositionInfo.Start < contentStartPosition) && (contentEndPosition < entity.PositionInfo.End))
                    /// сущность полностью содержит контент - контент включаем в родителя
                    {
                        ++entityIndex;
                        AddEntity(entity, contentInfo.CurrentEntityShift);
                        RemoveChildContent(sentenceInfo, contentInfo, contentIndex);
                        isRemovedContent = true;
                        break;
                    }
                    else if ((contentStartPosition < entity.PositionInfo.Start) && (entity.PositionInfo.End < contentEndPosition))
                    {
                        contentEntities.Add(entity);
                    }
                    #region [.defense.]
                    else                     /// сущность пересекается с дочерним контентом - пропускаем такую сущность
                    {
                        ++entityIndex;
                    }
                    #endregion
                }
            }
            if (!isRemovedContent)
            {
                UpdateUnitsPosition(contentEntities, notPotencialPartsShift - content.TextStartPosition);
                content.SetEntitiesForContentAndChildren(contentEntities, contentInfo.IsOnlyPotencialParts);
                if (isShiftedContent)
                {
                    contentInfo.CurrentEntityShift += content.GetFullLength();
                }
            }
        }
        /// <summary>
        /// Получение текста предложения с дочерними частями
        /// </summary>
        /// <param name="sentence">предложение</param>
        /// <param name="startPosition">начальная позиция предложения</param>
        /// <param name="isOnlyPotencial">флаг, что нужно выбирать только потенциальные части</param>
        /// <param name="contentIndex">индекс текущего контента</param>
        /// <returns>текст предложения с дочерними частями</returns>
        private string GetSentenceWithChildrenParts(TextParsing.Sentence sentence, int startPosition, bool isOnlyPotencial, ref int contentIndex)
        {
            StringBuilder result      = new StringBuilder(sentence.Text);
            var           indexes     = GetContentIndexesInsideSentence(sentence, ref contentIndex);
            int           partsLength = 0;

            foreach (int index in indexes)
            {
                ChildContent child = Children[index];
                if (!isOnlyPotencial || child.IsPotencialParentPart)
                {
                    result.Insert(GetContentCorrectedStart(index) - startPosition + partsLength, child.GetTextWithChildrenParts(isOnlyPotencial));
                    partsLength += child.GetFullLength();
                }
            }
            return(result.ToString());
        }