/// <summary>
        /// Получение списка индексов контентов начиная с текущего, которые лежат в заданном предложении
        /// </summary>
        /// <param name="textSentence">текстовое предложение</param>
        /// <param name="currentContentIndex">индекс текущего контента</param>
        /// <param name="sentenceShift">сдвиг предложения</param>
        /// <returns>список индексов контентов в заданном предложении</returns>
        private List <int> GetContentIndexesInsideSentence(TextParsing.Sentence textSentence, ref int currentContentIndex, int sentenceShift = 0)
        {
            List <int> result        = new List <int>();
            int        sentenceStart = textSentence.GetFullStartPosition() + sentenceShift;
            int        sentenceEnd   = textSentence.GetFullEndPosition() + sentenceShift;

            while (IsSentenceContainContent(currentContentIndex, textSentence.Text, sentenceStart, sentenceEnd))
            {
                result.Add(currentContentIndex);
                ++currentContentIndex;
            }
            return(result);
        }
        /// <summary>
        /// Создание объекта предложения
        /// </summary>
        /// <param name="textSentence">текстовое предложение</param>
        /// <param name="entities">список сущностей предложения</param>
        /// <param name="currentContentIndex">индекс текущего контента</param>
        /// <returns>объект предложения</returns>
        private Sentence CreateSentenceObject(TextParsing.Sentence textSentence, IEnumerable <Entity> entities, ref int currentContentIndex)
        {
            var result = new Sentence(textSentence.GetFullStartPosition() + GetFullContentsLength(currentContentIndex));

            if (entities.Any())
            {
                var entityWithLang = entities.FirstOrDefault(_ => !string.IsNullOrEmpty(_.Language));
                if (entityWithLang != null)
                {
                    result.Language = entityWithLang.Language;
                }
                else
                {
                    result.Language = "EN";
                }
            }
            var subSentence = CreateSubSentenceObject(result, textSentence, entities, GetContentIndexesInsideSentence(textSentence, ref currentContentIndex));

            result.SetSubSentencesHeirarchy(new SubSentence[] { subSentence });
            return(result);
        }
        /// <summary>
        /// Получение коллекции элементов подпредложения
        /// </summary>
        /// <param name="parentSubSentence">объект подпредложения</param>
        /// <param name="textSentence">текстовое подпредложение</param>
        /// <param name="entities">список сущностей</param>
        /// <returns>коллекция элементов предложения</returns>
        private List <UnitTextBase> GetSubSentenceUnits(SubSentence parentSubSentence, TextParsing.Sentence textSentence, IEnumerable <Entity> entities)
        {
            List <UnitTextBase> result = new List <UnitTextBase>();
            int currentTextPos         = 0;

            foreach (Entity entity in entities)
            {
                entity.MovePosition(textSentence.GetFullStartPosition());
                if (entity.PositionInfo.Start != 0)
                {
                    result.Add(SetParentSubSentence(CreateUnmarkedText(textSentence.Text, currentTextPos, entity.PositionInfo.Start), parentSubSentence));
                }
                result.Add(SetParentSubSentence(entity, parentSubSentence));
                currentTextPos = entity.PositionInfo.End;
            }
            if (currentTextPos < textSentence.Text.Length)
            {
                result.Add(SetParentSubSentence(CreateUnmarkedText(textSentence.Text, currentTextPos, textSentence.Text.Length), parentSubSentence));
            }
            return(result);
        }