private IOrderedEnumerable<SentenceElement> _compileMeaningPart(Stage4ResultElement meaningPart) { var result = new List<SentenceElement> { meaningPart }; result.AddRange(meaningPart.ServiceParts); result.AddRange(meaningPart.AddedWordsCase1); result.AddRange(meaningPart.AddedWordsCase2); return result.OrderBy(word => word.Order); }
public override void ProcessSentence(Sentence sentence) { _sentence = sentence; Debug.Assert(sentence.ElementList != null); Debug.Assert(sentence.ElementList.Count > 0); List<SentenceElement> words = sentence.ElementList; // разворачиваем все, что добавили на 3-м этапе в список резльтатов 4-го и после этого плюсуем к ним СЧР foreach (var itemStage3 in _meaningPartStage3Result.Items) { Stage4ResultElement item = new Stage4ResultElement(); item.CopyFromSourceWord(itemStage3); item.AddedWordsCase1 = itemStage3.AddedWordsCase1; item.AddedWordsCase2 = itemStage3.AddedWordsCase2; Result.Items.Add(item); } foreach (var itemStage4 in Result.Items) { itemStage4.ServiceParts.AddRange(words.FindAll(x => (x.SyntacticParentWordId == itemStage4.Id) && (x.IsServicePart))); // TODO: провести поиск СЧР для составных частей Add1 и Add2 // добавляем второй проход по выявленным СЧР, чтобы выявить ситуации "не были удовлетворены" (частица + вспом.глагол + XXX) List<SentenceElement> servicePartsSecondLevel = new List<SentenceElement>(); foreach (var servicePart in itemStage4.ServiceParts) servicePartsSecondLevel.AddRange(words.FindAll(x => (x.SyntacticParentWordId == servicePart.Id) && (x.IsServicePart))); itemStage4.ServiceParts.AddRange(servicePartsSecondLevel); } }