示例#1
0
 private static void checkLinkedChainMaster(RawSentencePart part, List<string> result)
 {
     result.AddRange(from chainReference in part.ChainReferences
                     where chainReference.IsMaster &&
                         !(part.SubjectId != null || part.PredicateId != null || part.ValuableAuxPartId != null)
                     select "'Родителем' в отдельной Зависимой цепочке должен являться либо Главный член предложения либо Значимый объект");
 }
示例#2
0
 private static void checkLinkedChainDependent(RawSentencePart part, List<string> result)
 {
     result.AddRange(from chainReference in part.ChainReferences
                     where !chainReference.IsMaster &&
                         !(part.SubjectId == null && part.PredicateId == null && part.ValuableAuxPartId == null)
                     select "Главные члены или Значимые объекты не должны быть в составе Зависимой цепочки в качестве Зависимого объекта");
 }
示例#3
0
        /// <summary>
        /// Проверяет часть предложения на корректность по набору правил. 
        /// </summary>
        /// <param name="part"></param>
        /// <returns>список ошибок (пустой, если все в порядке) </returns>
        public static List<string> Validate(RawSentencePart part)
        {
            var result = new List<string>();

            checkDataPresence(part, result);
            checkLinkedChainMaster(part, result);
            checkLinkedChainDependent(part, result);

            return result.Select(s => String.Format("Предложение {0}, часть {1}: {2}", part.SentenceId + 1, part.Position + 1, s)).ToList();
        }
示例#4
0
文件: Parser.cs 项目: Ogonik/LWS
        /// <summary>
        /// Разбор "сырых" данных. Строки из массива ячеек преобразовываются в части предложений (семантика в соответствии с таблицей)
        /// </summary>
        /// <param name="rawData"></param>
        /// <returns></returns>
        private static List<RawSentencePart> praseData(List<RowNoHeader> rawData)
        {
            return rawData.Select(row =>
            {
                var uniformId = row.FindIndex(UniformStartCell, UniformCellCount, isVluableCell) - UniformStartCell;
                var subjectId = row.FindIndex(SubjectStartCell, SubjectCellCount, isVluableCell) - SubjectStartCell;
                var predicateId = row.FindIndex(PredicateStartCell, PredicateCellCount, isVluableCell) - PredicateStartCell;
                var valuableAuxId = row.FindIndex(ValuableAuxStartCell, ValuableAuxCellCount, isVluableCell) - ValuableAuxStartCell;
                var linkedChainReferences = getChainReferences(row);

                var rawSentencePart = new RawSentencePart
                {
                    SentenceId = Int32.Parse(row[SentenceCell]) - 1,
                    Position = Int32.Parse(row[PositionCell]) - 1,
                    IsAuxilary = isVluableCell(row[IsAuxilaryCell]),
                    Word = row[WordCell],
                    SimpleSentenceId = row.FindIndex(SimpleSentenceIdStartCell, SimpleSentenceIdCellCount, isVluableCell) - SimpleSentenceIdStartCell,
                    UniformId = uniformId >= 0 ? uniformId : (int?) null,
                    SubjectId = subjectId >= 0 ? subjectId : (int?) null,
                    PredicateId = predicateId >= 0 ? predicateId : (int?) null,
                    ValuableAuxPartId = valuableAuxId >= 0 ? valuableAuxId : (int?) null,
                    ChainReferences = linkedChainReferences.Select(i => new RawSentencePart.LinkedChainReference
                    {
                        ChainId = i / 2,
                        IsMaster = i % 2 == 0
                    }).ToList()
                };

                return rawSentencePart;
            }).ToList();
        }
示例#5
0
 private static void checkDataPresence(RawSentencePart part, List<string> errors)
 {
     if (part.SimpleSentenceId < 0)
         errors.Add("Не указана принадлежность к простому предложению для слова (возможно наличие лишних скрытых строк таблицы)");
 }