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); } }
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 синтаксической ролью не нашлось."); }
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); }
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(" Элементов без синтаксической роли не нашлось."); }