/// <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)); }
/// <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)); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Проверка, что заданное подпредложение - обстоятельственный оборот /// </summary> /// <param name="subSentence">подпредложение</param> /// <returns>результат проверки</returns> private bool IsAdjunctPhrase(SubSentence subSentence) { return(DictionaryResource.IsStartWithAdjunct(subSentence.Units.GetText())); }