public override void ProcessSentence(Sentence sentence)
        {
            _sentence = sentence;
            Debug.Assert(_stage3Result != null);

            // ищем частицы
            List<SentenceWord> particles = sentence.WordList.Where(x => x.PartOfSpeech.Value == PartOfSpeech.Particle.Value).ToList();

            foreach (var itemStage3 in _stage3Result.Items)
            {
                Stage4ResultElement item = new Stage4ResultElement();
                item.CopyFromSourceWord(itemStage3);

                SentenceWord particle;

                particle = particles.Find(x => x.DOM == item.Id);
                if (particle != null)
                {
                    SentenceWord word = new SentenceWord();
                    word.CopyFromSourceWord(particle);
                    item.ServiceParts.Add(word);
                }

                particle = particles.Find(x => item.ServiceParts.Select(y => y.Id).ToList().Contains(x.DOM));
                if (particle != null)
                {
                    SentenceWord word = new SentenceWord();
                    word.CopyFromSourceWord(particle);
                    item.ServiceParts.Add(word);
                }

                Result.Items.Add(item);
            }
        }
        public override void ProcessSentence(Sentence sentence)
        {
            _sentence = sentence;
            Debug.Assert(_stage2Result != null);

            // TODO: объединить с main parts stage 3
            foreach (var itemStage2 in _stage2Result.Items.FindAll(x => x.IsConfirmed && !x.IsConjuction))
            {
                Stage3ResultElement item = new Stage3ResultElement();
                item.CopyFromSourceWord(itemStage2);

                foreach (var addWord in sentence.WordList.FindAll(x => x.DOM == itemStage2.Id && x.Link.Value == LinkType.Kolichest.Value))
                {
                    SentenceWord addItem = new SentenceWord();
                    addItem.CopyFromSourceWord(addWord);
                    item.AddedWordsCase1.Add(addItem);
                }

                foreach (var addWord in sentence.WordList.FindAll(x => x.DOM == itemStage2.Id && x.Link.Value == LinkType.Elekt.Value))
                {
                    SentenceWord addItem = new SentenceWord();
                    addItem.CopyFromSourceWord(addWord);
                    item.AddedWordsCase2.Add(addItem);

                    foreach (var addWord2 in sentence.WordList.FindAll(x => x.DOM == addItem.Id && x.Link.Value == LinkType.Predl.Value))
                    {
                        SentenceWord addItem2 = new SentenceWord();
                        addItem2.CopyFromSourceWord(addWord2);
                        item.AddedWordsCase2.Add(addItem2);
                    }
                }
                Result.Items.Add(item);
            }
        }