Ejemplo n.º 1
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new IfConjunctionHelperData(Info.InternalName);
            var hlpData = (IfConjunctionHelperData)result.HelperData;

            var thenIds = sourceData.HelperData.ColumnIntPositiveValues(HelperDataThenConjunctionIsFalseId.Name);

            if (!thenIds.Any()) return;

            var thenSentenceElement = result.Sentence.Elements.Find(x => x.Id == thenIds.First());

            foreach (var word in result.Sentence.Elements.FindAll(x => x.Order < thenSentenceElement.Order))
            {
                if (word.Lemma == IfLemmaValue &&
                    word.SyntacticRole.Value == SyntacticRole.SubordinatingConjunction.Value)
                {
                    var ifParent = result.Sentence.SyntacticParent(word);

                    hlpData.AddOrUpdateCustomRow(word.GUID,
                        word.Order, word.Id, ifParent?.Id, word.Id);

                }
                else
                    hlpData.AddOrUpdateCustomRow(word.GUID,
                        word.Order, word.Id, -1, -1);
            }
        }
Ejemplo n.º 2
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new SimpleSubjectHelperData(Info.InternalName);
            var hlpData = (SimpleSubjectHelperData) result.HelperData;

            foreach (var subjectCandidate in result.Sentence.Elements.FindAll(x => x.IsWord))
            {
                if (subjectCandidate.SyntacticRole.Value == SyntacticRole.Subject.Value)
                {
                    if (subjectCandidate.ControllerNodes.Find(x => x.ConnectionType.Value == ControllerConnectionType.Coreferential.Value) != null)
                    {
                        hlpData.AddOrUpdateCustomRow(subjectCandidate.GUID,
                            subjectCandidate.Id,
                            subjectCandidate.Id, -1,
                            subjectCandidate.Id,
                            SubjectType.Substantivated);
                    }
                    else
                    {
                        hlpData.AddOrUpdateCustomRow(subjectCandidate.GUID,
                            subjectCandidate.Id,
                            -1, subjectCandidate.Id,
                            subjectCandidate.Id,
                            SubjectType.General);
                    }

                    result.FinalResults.SubjectsFinalResults.AddOrUpdateSubject(subjectCandidate, SubjectClass.Undefined, ObjectSubstantivatorType.Undefined, aId: subjectCandidate.Id, bId: null);
                }
                else
                {
                    hlpData.AddOrUpdateCustomRow(subjectCandidate.GUID, subjectCandidate.Id, -1, -1, -1, string.Empty);
                }
            }
        }
Ejemplo n.º 3
0
        private void _convertIntermediateResultsToFinal(BaseSentenceAlgorithmData result, int parentId, Dictionary<int, PredicatePartsStageHelperObject> intermediateResult, BaseSentenceAlgorithmData sourceData, int rootId, string rootType)
        {
            _recursionLevel++;

            var currentResults = intermediateResult.ToList().FindAll(x => x.Value.Parent == parentId);

            if (currentResults.Count > 0)
            {
                foreach (var currentResult in currentResults)
                {
                    var currentSentenceElement = result.Sentence.Elements.Find(x => x.Id == currentResult.Key);

                    if (_recursionLevel == 1)
                    {
                        rootId = currentResult.Key;
                        rootType = sourceData.HelperData.GetRowByGUID(currentSentenceElement.GUID).Field<string>(HelperDataPredicateCorrectionSourceType.Name);
                    }

                    var predicatePartType = currentResult.Value.Type.ToString();

                    result.HelperData.AddOrUpdateCustomRow(currentSentenceElement.GUID, currentSentenceElement.Id, currentSentenceElement.Order, rootId, currentResult.Value.Parent, predicatePartType,  currentResult.Value.Level, rootType);

                    var newParentID = currentResult.Key;

                    _convertIntermediateResultsToFinal(result, newParentID, intermediateResult, sourceData, rootId, rootType);
                    _recursionLevel--;
                }
            }
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new AdverbialParticiplePairHelperData(Info.InternalName);

            var goPredicatesIds = sourceData.HelperData.ColumnIntPositiveValues(HelperDataGrammaticalBaseStage1PredicateId.Name);

            foreach (var advParticiple in result.FinalResults.PredicateBFinalResults.All.FindAll(x => x.PredicateType == PredicateType.AdverbialParticiple))
            {
                var parent = result.Sentence.SyntacticParent(advParticiple.Id);
                var parentIsPredicate = goPredicatesIds.Contains(parent.Id);

                var subjectsIds =
                    sourceData.HelperData.AsEnumerable()
                        .ToList()
                        .FindAll(x => x.Field<int>(HelperDataGrammaticalBaseStage1PredicateId.Name) == parent.Id)
                        .Select(x => x.Field<int>(HelperDataGrammaticalBaseStage1SubjectId.Name));
                foreach (var subjectId in subjectsIds)
                {
                    var goIndexes = goPredicatesIds.Select((element, index) => element == parent.Id ? index : -1).Where(i => i >= 0).ToList();
                    var subject = result.Sentence.Elements.Find(x => x.Id == subjectId);

                    result.HelperData.AddOrUpdateCustomRow(subject.GUID,
                        advParticiple.Id,
                        parent.Id,
                        parentIsPredicate ? parent.Id : -1,
                        string.Join(",", goIndexes),
                        subjectId);
                }

            }
        }
Ejemplo n.º 5
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new PSSLinkFeatureHelperData(Info.InternalName);
            var resultHelpData = (PSSLinkFeatureHelperData) result.HelperData;

            var pssElements = sourceData.HelperData.AsEnumerable().Select(x => x.Field<int>(HelperDataConjunctedWordsForPSSWordId.Name)).ToList();

            foreach (var pss in result.Sentence.Elements.FindAll(x => pssElements.Contains(x.Id)))
            {
                var coordinatingConjunction = result.Sentence.Elements.Find(x => x.SyntacticParentWordGUID == pss.GUID && x.SyntacticRole.Value == SyntacticRole.CoordinatingConjunction.Value);

                var conjunctionId = -1;
                var commaVirtualId = -1;
                if (coordinatingConjunction != null)
                    conjunctionId = coordinatingConjunction.Id;
                else
                    commaVirtualId = 500 + result.Sentence.Elements.Count;

                resultHelpData.AddOrUpdateCustomRow(pss.GUID
                     , pss.Id
                     , conjunctionId
                     , commaVirtualId);

                result.FinalResults.UniformPartsManager.AddOrUpdateUniformPart(pss, string.Empty, conjunctionId, commaVirtualId, AlgorithmActiveLOType.UniformPartsBaseRows);
            }
        }
Ejemplo n.º 6
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new AllGOHelperData(Info.InternalName);

            var currentGBNr = 1;
            foreach (var gb in GrammaticalBasises.OrderBy(x => x.SubjectOrder))
                gb.Nr = currentGBNr++;

            foreach (var gb in GrammaticalBasises)
            {
                gb.LoadGBProperties(result);

                result.HelperData.Rows.Add(Guid.NewGuid().ToString(), -1,
                    gb.Text,
                    gb.KSOPredicate?.Id,
                    gb.SubjectId,
                    gb.PredicateType,
                    gb.IsAdverbialBasis ? -1 : gb.Predicate.First().Id,
                    gb.IsAdverbialBasis ? gb.Predicate.First().Id : -1
               );
                // Актуализация
                result.FinalResults.GrammaticalBasisesFinalResults.All.Add(gb);
            }

            // добавляем номера главных ГО для ГО на основе причастий
            GrammaticalBasises.UpdateMainGrammarBasisNr();
        }
Ejemplo n.º 7
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new KSO_UP4HelperData(Info.InternalName);
            var resultHelpData = (KSO_UP4HelperData) result.HelperData;

            // липовый этап, просто прокидываем дальше некоторый набор данных с предыдущего этапа
            foreach (DataRow row in sourceData.HelperData.Rows)
            {
                resultHelpData.AddOrUpdateCustomRow(row.Field<string>(HelperDataColumnElementGUID.Name)
                    , row.Field<int>(HelperDataBetweenAndIIntermediateTrueId.Name)
                    , row.Field<int>(HelperDataBetweenAndIFalseId.Name)
                    , row.Field<int>(HelperDataBetweenAndINextStageId.Name));

                var falseId = row.Field<int>(HelperDataBetweenAndIFalseId.Name);

                var notTrueId = row.Field<int>(HelperDataColumnElementId.Name);
                var trueId = row.Field<int>(HelperDataBetweenAndIIntermediateTrueId.Name);

                if (falseId > -1)
                    result.FinalResults.UniformPartsManager.RemoveUniformPart(falseId, AlgorithmActiveLOType.UniformPartsStandart);
                else if(trueId == -1)
                    result.FinalResults.UniformPartsManager.RemoveUniformPart(notTrueId, AlgorithmActiveLOType.UniformPartsStandart);
            }

            result.FinalResults.UniformPartsFinalResultsStandart.DataArraysForCheckColunmNames.Clear();
            result.FinalResults.UniformPartsFinalResultsStandart.DataArraysForCheckColunmNames.Add(HelperDataBetweenAndINextStageId.Name, Info.InternalName);
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new InfinitiveDirectObjectHelperData(Info.InternalName);

            foreach (var loPredicate in result.FinalResults.PredicateBFinalResults.Items)
            {
                var index = result.FinalResults.PredicateBFinalResults.Items.IndexOf(loPredicate) + 1;
                var i1s = loPredicate.FindAll(x => x.PartType == PredicatePartType.Infinitive && x.Level == 1);
                var i2s = loPredicate.FindAll(x => x.PartType == PredicatePartType.Infinitive && x.Level == 2);
                var i3s = loPredicate.FindAll(x => x.PartType == PredicatePartType.Infinitive && x.Level == 3);
                var root = loPredicate.Find(x => x.PartType == PredicatePartType.Root);

                foreach (var i1 in i1s)
                {
                    result.HelperData.Rows.Add(Guid.NewGuid().ToString(), -1,
                        string.Join(" ", loPredicate.Select(x => x.Text)),
                        index,
                        PredicatesBFinalResults.KSO3PredicateId(loPredicate),
                        root?.Id ?? -1,
                        i1.Id,
                        string.Join(",", i2s.Select(x => x.Id)),
                        string.Join(",", i3s.Select(x => x.Id)),
                        i1.Id,
                        index);
                }

            }
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new AllDirectObjectsStage2ShowDataHelperData(Info.InternalName);
            var hlpData = (AllDirectObjectsStage2ShowDataHelperData) result.HelperData;

            foreach (DataRow row in sourceData.HelperData.Rows)
            {
                var subtype = (ObjectSubstantivatorType) Enum.Parse(typeof (ObjectSubstantivatorType), row.Field<string>(HelperDataFalseDirectObjectReconstructionDirectObjectSubtype.Name));

                if (subtype == ObjectSubstantivatorType.NoController)
                    subtype = ObjectSubstantivatorType.Definition;
                var directObjectId = row.Field<int>(HelperDataFalseDirectObjectReconstructionAllDirectObjectIds.Name);

                var predicateNr = DirectObjects.Find(x => x.Id == directObjectId).ControlPredicateNr;
                var predicateId = DirectObjects.Find(x => x.Id == directObjectId).ControlPredicateId;

                hlpData.AddOrUpdateCustomRow(
                    row.Field<string>(HelperDataColumnElementGUID.Name)
                    , row.Field<int>(HelperDataFalseDirectObjectReconstructionSourceDirectObjectId.Name)
                    , row.Field<int>(HelperDataFalseDirectObjectReconstructionAllDirectObjectIds.Name)
                    , subtype
                    , row.Field<int>(HelperDataFalseDirectObjectReconstructionDirectObjectOrder.Name)
                    , predicateNr
                    , predicateId
                    );
            }

            result.FinalResults.DirectObjectsFinalResults = new DirectObjectsFinalResults(DirectObjects);
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new QuasiUPAttachmentVerbLinkFeatureHelperData(Info.InternalName);
            var resultHelpData = (QuasiUPAttachmentVerbLinkFeatureHelperData) result.HelperData;

            foreach (DataRow row in sourceData.HelperData.AsEnumerable().ToList().FindAll(x => x.Field<int>(HelperDataQuasiUniformPartsAttachmentVerbPreliminaryId.Name) > 0))
            {
                var quasiUPVerbElementId = row.Field<int>(HelperDataQuasiUniformPartsAttachmentVerbPreliminaryId.Name);
                var quasiUPVerbElement = result.Sentence.GetElement(quasiUPVerbElementId);
                var xForQuasiUPVerb = row.Field<int>(HelperDataQuasiUniformPartsAttachmentVerbPreliminaryNr.Name);

                var coordinatingConjunction = result.Sentence.Elements.Find(x => x.SyntacticParentWordId == quasiUPVerbElement.Id && x.SyntacticRole.Value == SyntacticRole.CoordinatingConjunction.Value);

                var conjunctionId = -1;
                var commaVirtualId = -1;
                if (coordinatingConjunction != null)
                    conjunctionId = coordinatingConjunction.Id;
                else
                    commaVirtualId = 500 + result.Sentence.Elements.Count;

                resultHelpData.AddOrUpdateCustomRow(quasiUPVerbElement.GUID
                     , quasiUPVerbElement.Id
                     , xForQuasiUPVerb
                     , quasiUPVerbElement.Order
                     , commaVirtualId);

                result.FinalResults.UniformPartsManager.AddOrUpdateUniformPart(quasiUPVerbElement, string.Empty, conjunctionId, commaVirtualId, AlgorithmActiveLOType.UniformPartsBaseRows);
            }
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new AllSimpleSubjectsHelperData(Info.InternalName);
            var resultHelpData = (AllSimpleSubjectsHelperData)result.HelperData;
            var currentNr = 1;
            foreach (DataRow row in sourceData.HelperDataElements.Find(x => x.GetType() == typeof(GeneralHelperData)).Rows)
            {
                var generalSubjectId = row.Field<int>(HelperDataSimpleSubjectStandartId.Name);
                var substantivatedSubjectId = row.Field<int>(HelperDataSimpleSubjectSubstantivatedId.Name);
                var whichSubjectId = row.Field<int>(WhichSubjectHelperData.HelperDataWhichSubjectId.Name);

                var subjectType = generalSubjectId > 0
                    ? SubjectType.General
                    : substantivatedSubjectId > 0
                        ? SubjectType.Substantivated
                        : whichSubjectId > 0 ? SubjectType.Which : SubjectType.Undefined;

                if (generalSubjectId > 0 || substantivatedSubjectId > 0 || whichSubjectId > 0)
                resultHelpData.AddOrUpdateCustomRow(
                    row.Field<string>(HelperDataColumnElementGUID.Name)
                    , currentNr++
                    , generalSubjectId > 0 ? generalSubjectId : substantivatedSubjectId > 0 ? substantivatedSubjectId : whichSubjectId > 0 ? whichSubjectId : -1
                    , subjectType.ToString()
                    );
            }
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new QuasiUniformPartsAttachmentVerbPreliminaryHelperData(Info.InternalName);
            var hlpData = (QuasiUniformPartsAttachmentVerbPreliminaryHelperData) result.HelperData;

            var hitElements = result.Sentence.Elements.FindAll(x =>
                (x.SurfaceSlot == Consts.SurfaceSlotDefinedValues.SpecificationClause_Comma
                )
            );

            var textElementNr = 1;
            foreach (var sentenceElement in result.Sentence.Elements.FindAll(word => word.IsWord))
            {
                hlpData.AddOrUpdateCustomRow(sentenceElement.GUID,
                    sentenceElement.Id,
                    hitElements.Contains(sentenceElement) ? sentenceElement.Id : -1,
                    hitElements.Contains(sentenceElement) ? textElementNr : -1);

                if (hitElements.Contains(sentenceElement))
                    textElementNr++;
            }

            foreach (var hit in hitElements)
            {
                Debug.Assert(false, "Дать Ане данный пример для анализа и последующего тестирования");
            }
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new ForbidJoiningInfinitivesShowDataHelperData(Info.InternalName);
            var hlpData = (ForbidJoiningInfinitivesShowDataHelperData)result.HelperData;

            // формируем вспомогательные объекты
            var sourceElements =
                (from DataRow row in sourceData.HelperData.Rows select PredicatePartHelperObject.ReadFromResultRow(row))
                    .ToList();

            foreach (var infinitive in sourceElements.FindAll(
                        x =>
                            x.PartType == PredicatePartType.Infinitive &&
                            (x.RootPredicateLOConjunctionKind == LOPredicateConjunctionType.InnerConjunction ||
                             x.RootPredicateLOConjunctionKind == LOPredicateConjunctionType.InnerAndOuterConjunction)))
            {
                var infinitiveInfo = $"№ id {infinitive.Id} ({infinitive.Text})";

                hlpData.AddOrUpdateCustomRow(infinitive.GUID
                    , infinitiveInfo
                    , infinitive.Order
                    , infinitive.Level
                    , infinitive.UPRowNr

                    , infinitive.CanJoinAnotherInfinitive.ToString()
                    , infinitive.ForbidToJoinAnotherInf.ToString()
                    , infinitive.ForbidToJoinAnotherInf == ForbidToJoinAnotherInfOrAuxVerb.Forbid || infinitive.ForbidToJoinAnotherInf == ForbidToJoinAnotherInfOrAuxVerb.Undefined ? infinitiveInfo : "--"

                    );
            }
        }
Ejemplo n.º 14
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new ConjuctedWordsHelperData(Info.InternalName);
            var hlpData = (ConjuctedWordsHelperData) result.HelperData;

            var hitElements = result.Sentence.Elements.FindAll(x =>
                x.ConjunctedWithId > -1
            );

            var ids = hitElements.Select(x => x.Id).Concat(hitElements.Select(y => y.ConjunctedWithId)).Distinct().ToList();

            foreach (var sentenceElement in result.Sentence.Elements.FindAll(word => word.IsWord))
            {
                var conjunctedSentenceElement = result.Sentence.Elements.Find(x => x.Id == sentenceElement.ConjunctedWithId);
                var conjunctedText = string.Empty;
                if (conjunctedSentenceElement != null)
                {
                    conjunctedText = conjunctedSentenceElement.Text;
                }

                hlpData.AddOrUpdateCustomRow(sentenceElement.GUID,
                    sentenceElement.Id,
                    ids.Contains(sentenceElement.Id) ? sentenceElement.Id : -1,
                    ids.Contains(sentenceElement.Id) ? sentenceElement.ConjunctedWithId: -1,
                    ids.Contains(sentenceElement.Id) ? conjunctedText : "");

                if(ids.Contains(sentenceElement.Id))
                    result.FinalResults.UniformPartsManager.AddOrUpdateUniformPart(sentenceElement, UniformPartsFinalResults.UnknownRowNr, -1, -1, AlgorithmActiveLOType.UniformPartsStandart);
            }
            result.FinalResults.UniformPartsFinalResultsStandart.DataArraysForCheckColunmNames.Add(HelperDataConjuctedWordsWordId.Name, Info.InternalName);
        }
Ejemplo n.º 15
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            // Алгоритм УДАЛЕН 19.09.2016г.

            /*Debug.Assert(result.Sentence != null);

             result.HelperData = new UPRowsHelperData();
             var resultHelpData = result.HelperData as UPRowsHelperData;

            var sourceWordInfo = sourceData.HelperData.Rows;
            var wordInfos = new List<HelperQuasiUPObject>();
            foreach (DataRow row in sourceWordInfo)
                wordInfos.Add(new HelperQuasiUPObject(row.Field<int>(HelperDataQuasiUniformPartsMainElementId.Name), row.Field<int>(HelperDataQuasiUniformPartsMainElementNr.Name), row.Field<string>(HelperDataColumnElementGUID.Name)));

            int normalRowId = 1;
            foreach (var group in wordInfos.GroupBy(x => x.Nr))
            {
                foreach (var item in group)
                        resultHelpData.AddOrUpdateCustomRow(item.GUID, item.WordId, normalRowId, item.WordId, string.Join(StandartUPRowsHelperData.Delim, RowsId, normalRowId));

                normalRowId++;
            }

            // сортировка
            // resultHelpData.DefaultView.Sort = HelperDataUPRowsUPRowNr.Name + ", " + HelperDataUPRowsUPOrder.Name + " ASC";
            */
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new UPRowsMergeHelperData(Info.InternalName);
            var hlpData = (UPRowsMergeHelperData)result.HelperData;

            foreach (DataRow row in _upMergeHelperData.Rows)
                hlpData.Rows.Add(row.ItemArray);

            foreach (DataRow row in sourceData.HelperData.Rows)
            {
                var upId = row.Field<int>(HelperDataComplementUniformPartsFinalDivorcedComplementUP.Name);
                if (upId <= -1) continue;

                var el = result.Sentence.Elements.Find(x => x.Id == upId);

                hlpData.AddOrUpdateCustomRow(
                    el.GUID,
                    el.Id,
                    el.Order,
                    row.Field<int>(HelperDataComplementUniformPartsFeatureLinkConj.Name),
                    row.Field<int>(HelperDataComplementUniformPartsFeatureLinkComma.Name)
                    );
            }

            UPRowsMergeAlgorithm.MakeUniqueUpRows(hlpData);

            // добавляем в предложение информацию об однородных членах
            // TODO: разобраться с актуализацией
            //result.FinalResults.UniformPartsFinalResults = new UniformPartsFinalResults(hlpData, result.Sentence.Elements);
        }
Ejemplo n.º 17
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            var source = sourceData.HelperData as QuasiUniformPartsPreliminaryHelperData;
            Debug.Assert(source?.HitElements != null);

            result.HelperData = new QuasiUniformPartsMainHelperData(Info.InternalName);
            var resultHelpData = (QuasiUniformPartsMainHelperData) result.HelperData;

            var quasiUPPreliminaryElements = source.HitElements;
            var quasiUPCounter = 1;
            var groupCounter = 1;
            var quasiUPPreliminaryGroups = quasiUPPreliminaryElements.GroupBy(x => x.Value);

            //Log.InfoFormat("посмотреть по таблицам вопрос назначения номера для КвазиОЧ");

            foreach (var group in quasiUPPreliminaryGroups)
            {
                var listForGroup = group.Select(x => x.Key).ToList();
                Log.InfoFormat("Обрабатываем группу №{1}. Количество элементов: {0}.", listForGroup.Count, groupCounter);

                Log.Info("  Обрабатываем все элементы группы без синтаксической роли.");
                var emptySyntacticRoleElements = listForGroup.FindAll(x => x.SyntacticRole.Value == SyntacticRole.Undefined.Value);
                ProcessEmptySyntacticRoleElements(emptySyntacticRoleElements, group.Key.ToString(), ref quasiUPCounter, resultHelpData);

                Log.Info("  Обрабатываем все элементы группы с синтаксической ролью.");
                var syntacticRoleElements = listForGroup.FindAll(x => x.SyntacticRole.Value != SyntacticRole.Undefined.Value);
                ProcessSyntacticRoleElements(syntacticRoleElements, group.Key.ToString(), ref quasiUPCounter, resultHelpData);

                groupCounter++;
            }
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new AdverbialParticiplesAndPhantomsHelperData(Info.InternalName);
            var hlpData = (AdverbialParticiplesAndPhantomsHelperData) result.HelperData;
            foreach (var element in result.Sentence.Elements.FindAll(x => x.IsWord))
            {
                if (element.GrammarInfo.PartOfSpeech.Value == PartOfSpeech.AdverbialParticiple.Value)
                {
                    hlpData.AddOrUpdateCustomRow(element.GUID, element.Id, element.Id, -1);
                    // Актуализация
                    result.FinalResults.PredicateAFinalResults.AddOrUpdateSingleRootPredicate(element, PredicateType.AdverbialParticiple);
                }
                else if (element.SurfaceSlot == Consts.SurfaceSlotDefinedValues.Verb && element.IsRestored)
                    //// element.SemanticInfo.LexicalClass.Value == SemanticInfoLexicalClass.ElliptedVerb.Value)
                {
                    hlpData.AddOrUpdateCustomRow(element.GUID, element.Id, -1, element.Id);
                    // Актуализация
                    result.FinalResults.PredicateAFinalResults.AddOrUpdateSingleRootPredicate(element, PredicateType.Phantom);
                }
                else
                    hlpData.AddOrUpdateCustomRow(element.GUID, element.Id, -1, -1);
            }
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new QuasiUPAttachmentVerbRowsHelperData(Info.InternalName);
            var resultHelpData = (QuasiUPAttachmentVerbRowsHelperData) result.HelperData;

            var sourceWordInfo = sourceData.HelperData.Rows;
            var wordInfos = (from DataRow row in sourceWordInfo select new HelperQuasiUPObject(row.Field<int>(HelperDataQuasiUniformPartsAttachmentVerbMainId.Name), row.Field<int>(HelperDataQuasiUniformPartsAttachmentVerbMainNr.Name), row.Field<string>(HelperDataColumnElementGUID.Name))).ToList();

            var normalRowId = 1;

            foreach (var group in wordInfos.GroupBy(x => x.Nr).Where(grp => grp.Count() > 1))
            {
                foreach (var item in group)
                {
                    var rowNr = string.Join(StandartUPRowsHelperData.Delim, RowsId, normalRowId);
                    resultHelpData.AddOrUpdateCustomRow(item.GUID, item.WordId, rowNr, item.WordId);

                    result.FinalResults.UniformPartsManager.AddOrUpdateUniformPart(result.Sentence.Elements.Find(x => x.Id == item.WordId), rowNr, -1, -1, AlgorithmActiveLOType.UniformPartsBaseRows);
                }

                normalRowId++;
            }

            // сортировка
            resultHelpData.DefaultView.Sort = HelperDataQuasiUPAttachmentVerbUPFullRowNr.Name + ", " + HelperDataQuasiUPAttachmentVerbRowsMembersOrder.Name + " ASC";
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new QuasiUniformPartsPreliminaryHelperData(Info.InternalName);
            var hlpData = (QuasiUniformPartsPreliminaryHelperData) result.HelperData;

            var hitElements = result.Sentence.Elements.FindAll(x => x.SyntacticParentWordId > 0).GroupBy(x => x.SyntacticParentWordGUID)
                .Select(grp => grp.ToList()).Where(grp => grp.Count > 1).ToList();

            var groupNr = 0;
            var elementsAndTheirGroups = new Dictionary<SentenceElement, int>();

            foreach (var hit in hitElements)
            {
                groupNr++;
                foreach (var element in hit)
                    elementsAndTheirGroups.Add(element, groupNr);

            }

            foreach(var sentenceElement in result.Sentence.Elements.FindAll(word => word.IsWord))
            {
                hlpData.AddOrUpdateCustomRow(sentenceElement.GUID
                    , sentenceElement.Id
                    , elementsAndTheirGroups.ContainsKey(sentenceElement) ? sentenceElement.SyntacticParentWordId : -1
                    , elementsAndTheirGroups.ContainsKey(sentenceElement) ? sentenceElement.Id : -1
                    , elementsAndTheirGroups.ContainsKey(sentenceElement) ? elementsAndTheirGroups[sentenceElement] : -1);
            }

            hlpData.HitElements = elementsAndTheirGroups;
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new ForbidJoiningInfinitivesAndAuxVerbsShowDataHelperData(Info.InternalName);
            var hlpData = (ForbidJoiningInfinitivesAndAuxVerbsShowDataHelperData)result.HelperData;

            // формируем вспомогательные объекты
            var sourceElements =
                (from DataRow row in sourceData.HelperData.Rows select PredicatePartHelperObject.ReadFromResultRow(row))
                    .ToList();

            foreach (var element in sourceElements.FindAll(x => x.PartType != PredicatePartType.AuxVerb && (x.RootPredicateLOConjunctionKind == LOPredicateConjunctionType.OuterConjunction || x.RootPredicateLOConjunctionKind == LOPredicateConjunctionType.InnerAndOuterConjunction)))
            {
                var elementInfo = $"№ id {element.Id} ({element.Text})";
                var rootElement = sourceElements.Find(x => x.Id == element.RootParentId);
                var rootElementInfo = $"№ id {rootElement.Id} ({rootElement.Text})";

                hlpData.AddOrUpdateCustomRow(element.GUID
                    , element.UPRowNr
                    , element.Order
                    , rootElementInfo
                    , element.ForbidToJoinAnotherInf.ToString()
                    , element.ForbidToJoinAnotherAuxVerb.ToString()
                    );
            }
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new StandartDirectObjectHelperData(Info.InternalName);

            foreach (var word in result.Sentence.Elements.FindAll(x => x.IsWord))
            {
                if (word.SurfaceSlot == Consts.SurfaceSlotDefinedValues.ObjectDirect)
                {
                    Log.InfoFormat($"Нашли прямое дополнение: Id = {word.Id} Text = {word.Text}");
                    var controlPredicate = FindControlPredicate.Analyze(word.Id,
                        result.FinalResults.PredicateBFinalResults, result.Sentence);

                    if (controlPredicate != null)
                    {
                        result.HelperData.AddOrUpdateCustomRow(word.GUID, word.Id,
                            word.Id,
                            controlPredicate.Find(x => x.PartType == PredicatePartType.Root).Id,
                            result.FinalResults.PredicateBFinalResults.Items.IndexOf(controlPredicate) + 1);
                    }
                    else
                        result.HelperData.AddOrUpdateCustomRow(word.GUID, word.Id,
                            word.Id,
                            -1,
                            string.Empty);

                }
                else
                    result.HelperData.AddOrUpdateCustomRow(word.GUID, word.Id,
                        -1,
                        -1,
                        string.Empty);
            }
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new FindConjunctedGBHelperData(Info.InternalName);

            foreach (var gb in GrammaticalBasises)
            {
                var conjunctedGBNrForSubject = GrammaticalBasises.GetConjunctedGBNrForWord(gb, gb.SubjectId, result.FinalResults.UniformPartsFinalResults);

                if (conjunctedGBNrForSubject > -1)
                    gb.ConjunctedWithGBNrs.Add(conjunctedGBNrForSubject);

                result.HelperData.Rows.Add(Guid.NewGuid().ToString(), -1, gb.Text
                    , gb.SubjectId
                    , gb.Nr
                    , conjunctedGBNrForSubject
                    , conjunctedGBNrForSubject > -1 && gb.IsConjuncted ? gb.Nr : -1
                    );

                foreach (var predicate in gb.Predicate)
                {
                    var conjunctedGBNrForPredicateElement = GrammaticalBasises.GetConjunctedGBNrForWord(gb, predicate.Id, result.FinalResults.UniformPartsFinalResults);
                    if (conjunctedGBNrForPredicateElement > -1)
                        gb.ConjunctedWithGBNrs.Add(conjunctedGBNrForPredicateElement);

                    result.HelperData.Rows.Add(Guid.NewGuid().ToString(), -1, gb.Text
                        , predicate.Id
                        , gb.Nr
                        , conjunctedGBNrForPredicateElement
                        , conjunctedGBNrForPredicateElement > -1 && gb.IsConjuncted ? gb.Nr : -1
                    );
                }
            }
        }
Ejemplo n.º 24
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new ParticiplesHelperData(Info.InternalName);
            var hlpData = (ParticiplesHelperData) result.HelperData;

            // получаем инфу об ОЧ рядах и их членах
            var upRows = sourceData.FinalResults.UniformPartsFinalResults;

            foreach (var element in result.Sentence.Elements.FindAll(x => x.IsWord))
            {
                if (element.GrammarInfo.PartOfSpeech.Value == PartOfSpeech.Participle.Value)
                {
                    Log.InfoFormat("Рассматриваем причастие: Id = {0}, Text = {1}", element.Id, element.Text);
                    var info = _processParticiple(element, result.Sentence, upRows);
                    hlpData.AddOrUpdateCustomRow(element.GUID, element.Id,
                        info[0], info[1], info[2], info[3], info[4]);

                    // Актуализация
                    if ((int) info[3] > -1)
                    {
                        var particicpleElement = result.Sentence.GetElement((int) info[3]);
                        result.FinalResults.PredicateAFinalResults.AddOrUpdateSingleRootPredicate(particicpleElement,
                            PredicateType.Participle);
                    }
                }

                else
                    hlpData.AddOrUpdateCustomRow(element.GUID, element.Id, -1, -1, -1, -1, -1);
            }
        }
        protected override BaseSentenceAlgorithmData InitSourceData(List<BaseSentenceAlgorithm> algorithms)
        {
            // источников слишком много, чтобы их мерджить, поэтому определяем их как члены класса
            // данный метод будем использовать для инициализации исходных данных и списка действий для выполнения
            _dataAndActions = new List<KeyValuePair<BaseHelperData, BasePostProcessingAction>>();

            _addDataActionsForAddConjunction(algorithms);
            _addDataActionsForDeleteConjunction(algorithms);
            _addDataActionsForModifySyntacticRole(algorithms);
            _addDataActionsForModifySyntacticParent(algorithms);
            _addDataActionsForRemoveSentenceElements(algorithms);
            _addDataActionsForModifyPartOfSpeech(algorithms);
            _addDataActionsForModifySurfaceSlot(algorithms);
            _addDataActionsForModifyText(algorithms);
            _addDataActionsForModifyLemma(algorithms);

            // берем последний алгоритм и его предложение
            var lastResult = algorithms[algorithms.IndexOf(this) - 1].AlgResult;
            var result = new BaseSentenceAlgorithmData
            {
                Sentence = lastResult.Sentence,
                FinalResults = lastResult.FinalResults.Clone()
            };
            return result;
        }
Ejemplo n.º 26
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new DivorcedWordsRootHelperData(Info.InternalName);
            var hlpData = (DivorcedWordsRootHelperData)result.HelperData;

            foreach (var sentenceElement in result.Sentence.Elements.FindAll(word => word.IsWord))
            {
                var emergencySlot = sentenceElement.SurfaceSlot == Consts.SurfaceSlotDefinedValues.EmergencySlot;

                var isRootSubject = sentenceElement.SurfaceSlot == Consts.SurfaceSlotDefinedValues.Noun &&
                                  sentenceElement.SyntacticRole.Value == SyntacticRole.Subject.Value;
                var isPredicate = sentenceElement.SyntacticRole.Value == SyntacticRole.Predicate.Value;

                hlpData.AddOrUpdateCustomRow(sentenceElement.GUID,
                    sentenceElement.Id,
                    emergencySlot,
                    isRootSubject,
                    isPredicate,
                    (emergencySlot && isRootSubject) && !isPredicate ? sentenceElement.Id : -1
                    );
            }

            if (hlpData.ColumnIntPositiveValues(HelperDataDivorcedWordsRootRootId.Name).Any())
                MessageBox.Show("Обнаружена ГОС");
        }
Ejemplo n.º 27
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);

            result.HelperData = new PredicatePartsHelperData(Info.InternalName);
            var hlpData = (PredicatePartsHelperData) result.HelperData;

            var entryIds = sourceData.HelperData.ColumnValues<int>(HelperDataPredicateCorrectionPredicateCorrectedId.Name);

            var intermediateResult = _searchForAllLevelsOfPredicates(entryIds, result.Sentence.Elements);

            if (intermediateResult.Count > 0)
                Log.InfoFormat("Промежуточные результаты:{0}{1}", Environment.NewLine, string.Join(Environment.NewLine, intermediateResult.Select(x => x.ToString())));

            // добавляем в результаты все сказуемые, для которых не нашлось составных частей
            foreach (var entry in result.Sentence.Elements.FindAll(x => entryIds.Contains(x.Id) && !intermediateResult.Keys.Contains(x.Id)))
            {
                var predicateType = sourceData.HelperData.GetRowByGUID(entry.GUID).Field<string>(HelperDataPredicateCorrectionSourceType.Name);
                hlpData.AddOrUpdateCustomRow(entry.GUID, entry.Id, entry.Order, entry.Id, -1, PredicatePartType.Root, 0, predicateType);
            }

            _convertIntermediateResultsToFinal(result, -1, intermediateResult, sourceData, -1, "");

            hlpData.DefaultView.Sort = HelperDataPredicatePartsParentId.Name + ", " + HelperDataPredicatePartsOrder.Name + " ASC";
        }
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            var source = sourceData.HelperData as QuasiUniformPartsAttachmentMainHelperData;

            result.HelperData = new QuasiUniformPartsAttachmentType1Stage1ShowDataHelperData(Info.InternalName);
            var resultHelpData = (QuasiUniformPartsAttachmentType1Stage1ShowDataHelperData)result.HelperData;

            foreach (DataRow row in source.Rows)
            {
                var guid = row.Field<string>(HelperDataColumnElementGUID.Name);

                var el32 = -1;
                if (row.Field<bool>(HelperDataQuasiUniformPartsAttachmentMainIsType2.Name))
                    el32 = row.Field<int>(HelperDataQuasiUniformPartsAttachmentMainSourceId.Name);

                var el33 = row.Field<int>(HelperDataQuasiUniformPartsAttachmentMainType2ConfirmedId.Name);
                var f1023 = row.Field<int>(HelperDataQuasiUniformPartsAttachmentMainType2ConfirmedNr.Name);

                var el34 = row.Field<int>(HelperDataQuasiUniformPartsAttachmentMainType1ConfirmedId.Name);
                var f1024 = row.Field<int>(HelperDataQuasiUniformPartsAttachmentMainType1ConfirmedNr.Name);

                if (el32 > 0)
                {
                    resultHelpData.AddOrUpdateCustomRow(guid,
                        el32,
                        el33,
                        f1023,
                        el34,
                        f1024
                        );
                }
            }
        }
Ejemplo n.º 29
0
        protected override void DoProcess(BaseSentenceAlgorithmData sourceData, BaseSentenceAlgorithmData result)
        {
            Debug.Assert(result.Sentence != null);
            result.HelperData = new ThenConjunctionHelperData(Info.InternalName);
            var hlpData = (ThenConjunctionHelperData)result.HelperData;

            foreach (var word in result.Sentence.Elements.FindAll(x => x.IsWord))
            {
                if (word.Lemma == ThenLemmaValule &&
                    word.SyntacticRole.Value == SyntacticRole.CoordinatingConjunction.Value)
                {
                    var thenParentFromUP = _uniformPartsFinalResults.All.Find(x => x.Id == result.Sentence.SyntacticParent(word).Id);
                    if (thenParentFromUP != null)
                    {
                        hlpData.AddOrUpdateCustomRow(word.GUID,
                        word.Id, word.Id, word.Order, word.Id);

                        throw new Exception("Обнаружен ложный сюоз ТО");
                    }
                    else
                    {
                        hlpData.AddOrUpdateCustomRow(word.GUID,
                        word.Id, word.Id, word.Order, -1);
                    }
                }
                else
                    hlpData.AddOrUpdateCustomRow(word.GUID,
                        word.Id, -1, -1, -1);
            }
        }
        protected override BaseSentenceAlgorithmData InitSourceData(List<BaseSentenceAlgorithm> algorithms)
        {
            _apr3InsertsResults = algorithms.FindByInternalName(AlgorithmNames.PreProcessing.Inserts.InternalName, false)?.AlgResult;
            _apr4CheckGB = algorithms.FindByInternalName(AlgorithmNames.PreProcessing.CheckGB.InternalName, false)?.AlgResult;
            _apr2EnumerationBlockResults = algorithms.FindByInternalName(AlgorithmNames.PreProcessing.Enumerations.InternalName, false)?.AlgResult;

            return new BaseSentenceAlgorithmData();
        }