/// <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); }