예제 #1
0
        private static void CheckForEqualCaseAndPossiblyAddElementsToResult(IEnumerable<SentenceElement> elements, string groupNr, ref int upCounter, QuasiUniformPartsMainHelperData resultHelpData)
        {
            var groupedByCase = elements.GroupBy(x => x.GrammarInfo.Case.Value).ToList();
            if (groupedByCase.Count() == 1)
            {
                Log.InfoFormat("      Все значения <case> у данных элементов одинаковые и равны {0}. Подтверждаем элементы.", groupedByCase.First().First().GrammarInfo.Case.Value);
                foreach (var item in groupedByCase.First())
                    AddElement(item, groupNr, ref upCounter, resultHelpData);

                upCounter++;
            }
            else
            {
                Log.Info("      Среди них есть элементы с разными значениями <case>. Ничего не делаем. Первые значения <case>:");
                foreach (var item in groupedByCase)
                    Log.InfoFormat("        id: {0}; Text: {1}, Surface slot: {2}", item.First().Id, item.First().Text, item.First().GrammarInfo.Case);
            }
        }
예제 #2
0
        private void ProcessSyntacticRoleElements(List<SentenceElement> elements, string groupNr, ref int UPCounter, QuasiUniformPartsMainHelperData resultHelpData)
        {
            if (elements.Count > 0)
            {
                Log.InfoFormat("    Количество найденных элементов: {0} шт. Группируем по <syntactic_role>.", elements.Count);
                var groupedBySyntacticRole = elements.GroupBy(x => x.SyntacticRole.Value).ToList();
                if (groupedBySyntacticRole.Count() == 1)
                {
                    var uniqueSyntacticRoleValue = groupedBySyntacticRole.First().First().SyntacticRole.Value;
                    Log.InfoFormat("    Все значения <syntactic_role> у данных элементов одинаковые и равны {0}.", uniqueSyntacticRoleValue);

                    if (uniqueSyntacticRoleValue == SyntacticRole.AdverbialModifier.Value
                        || uniqueSyntacticRoleValue == SyntacticRole.ConcordantAttr.Value
                        || uniqueSyntacticRoleValue == SyntacticRole.IndirectObject.Value)
                    {
                        if (uniqueSyntacticRoleValue == SyntacticRole.AdverbialModifier.Value || uniqueSyntacticRoleValue == SyntacticRole.ConcordantAttr.Value)
                        {
                            Log.Info("    Выполняем проверку на равенство <surface_slot>");
                            CheckForEqualSurfaceSlotAndPossiblyAddElementsToResult(elements, groupNr, ref UPCounter, resultHelpData);
                        }
                        else if (uniqueSyntacticRoleValue == SyntacticRole.IndirectObject.Value)
                        {
                            Log.Info("    Выполняем проверку на равенство <case>");
                            CheckForEqualCaseAndPossiblyAddElementsToResult(elements, groupNr, ref UPCounter, resultHelpData);
                        }
                        else
                            Debug.Assert(false);
                    }
                    else
                    {
                        Log.Info("    Проверка на не равенство некоторым значениям синтаксической выполнена. Подтверждаем элементы.");
                        foreach (var item in groupedBySyntacticRole.First())
                            AddElement(item, groupNr, ref UPCounter, resultHelpData);

                        UPCounter++;
                    }
                }
                else
                {
                    Log.Info("    Среди них есть элементы с разными значениями <syntactic_role>. Ничего не делаем. Первые значения <syntactic_role>:");
                    foreach (var item in groupedBySyntacticRole)
                        Log.InfoFormat("      id: {0}; Text: {1}, syntactic role: {2}", item.First().Id, item.First().Text, item.First().SyntacticRole.Value);
                }
            }
            else
                Log.Info("Элементов c синтаксической ролью не нашлось.");
        }
예제 #3
0
 private static void AddElement(SentenceElement item, string groupNr, ref int upCounter, QuasiUniformPartsMainHelperData resultHelpData)
 {
     resultHelpData.AddOrUpdateCustomRow(item.GUID, item.Id, groupNr, item.Id, upCounter);
     Log.InfoFormat("Добавили элемент: id = {0}; Text = {1}; Surface slot = {2}; Syntactic Role = {3}; case = {4}", item.Id, item.Text, item.SurfaceSlot, item.SyntacticRole.Value, item.GrammarInfo.Case.Value);
 }
예제 #4
0
 private static void ProcessEmptySyntacticRoleElements(List<SentenceElement> elements, string groupNr, ref int upCounter, QuasiUniformPartsMainHelperData resultHelpData)
 {
     if (elements.Count > 0)
     {
         Log.InfoFormat("    Найдено {0} элементов", elements.Count);
         CheckForEqualSurfaceSlotAndPossiblyAddElementsToResult(elements, groupNr, ref upCounter, resultHelpData);
     }
     else
         Log.Info("    Элементов без синтаксической роли не нашлось.");
 }