Пример #1
0
 private void AddErrorsForUnpairedItems(NumberTexts textAreas, bool isSource)
 {
     for (var i = 0; i < textAreas.Texts.Count; i++)
     {
         var visitedIndexes = isSource ? _visitedSourceIndexes : _visitedTargetIndexes;
         var message        = isSource ? PluginResources.Error_NumbersRemoved : PluginResources.Error_NumberAdded;
         if (!visitedIndexes.Contains(i))
         {
             textAreas.Texts[i].AddError(NumberText.ErrorLevel.SegmentPairLevel, message);
         }
     }
 }
Пример #2
0
        private void Verify(out NumberTexts sourceNumberTexts, out NumberTexts targetNumberTexts, List <ExcludedRange> sourceExcludedRanges, List <ExcludedRange> targetExcludedRanges)
        {
            sourceNumberTexts = new NumberTexts(_sourceText, GetNumberFormattingSettings(true, sourceExcludedRanges));
            targetNumberTexts = new NumberTexts(_targetText, GetNumberFormattingSettings(false, targetExcludedRanges));

            if (_settings.CheckInOrder)
            {
                CheckAlignment(sourceNumberTexts, targetNumberTexts);
            }
            else
            {
                CrossCheck(sourceNumberTexts, targetNumberTexts);
            }
        }
Пример #3
0
        private void CrossCheck(NumberTexts sourceTextAreas, NumberTexts targetTextAreas)
        {
            _visitedTargetIndexes = new List <int>();
            _visitedSourceIndexes = new List <int>();

            var crossComparisons = new List <ComparisonItem>();

            for (var i = 0; i < targetTextAreas.Texts.Count; i++)
            {
                var sourceIndexList = sourceTextAreas.IndexesOf(targetTextAreas[i]);
                sourceIndexList.ForEach(sourceIndex => crossComparisons.Add(new ComparisonItem
                {
                    SourceIndex = sourceIndex.Item1,
                    TargetIndex = i,
                    Comparer    = sourceIndex.Item2
                }));
            }
            crossComparisons = crossComparisons.OrderByDescending(i => i.Comparer.SimilarityDegree).ToList();

            var actualComparisonScores = crossComparisons.Select(cc => cc.Comparer.SimilarityDegree).Distinct();

            foreach (var score in actualComparisonScores)
            {
                var comparisonsOfCurrentResult = crossComparisons.Where(cc => cc.Comparer.SimilarityDegree == score).ToList();

                if (!comparisonsOfCurrentResult.Any())
                {
                    continue;
                }

                //group comparisons by the element toBeCompared
                var grouped = comparisonsOfCurrentResult.GroupBy(c => c.TargetIndex);
                foreach (var group in grouped)
                {
                    //since comparisonResults are ordered descendingly, the first in the group should be of highest similarity -> compare against that one
                    var first = group.FirstOrDefault(IndexesNotVisisted);

                    if (first == null)
                    {
                        continue;
                    }

                    AddError(targetTextAreas[first.TargetIndex], first.Comparer);
                    UpdateVisitedList(first.SourceIndex, first.TargetIndex);
                }
            }

            AddErrorsForUnpairedItems(sourceTextAreas, true);
            AddErrorsForUnpairedItems(targetTextAreas, false);
        }
Пример #4
0
        private void CheckAlignment(NumberTexts sourceTextAreas, NumberTexts targetTextAreas)
        {
            for (var i = 0; i < sourceTextAreas.Texts.Count; i++)
            {
                if (i >= targetTextAreas.Texts.Count)
                {
                    var message = PluginResources.Error_NumbersRemoved;
                    sourceTextAreas[i].AddError(NumberText.ErrorLevel.SegmentPairLevel,
                                                message);
                    continue;
                }

                var sourceTargetComparison = sourceTextAreas[i].Compare(targetTextAreas[i]);
                AddError(targetTextAreas[i], sourceTargetComparison);
            }

            for (var i = sourceTextAreas.Texts.Count; i < targetTextAreas.Texts.Count; i++)
            {
                targetTextAreas[i].AddError(NumberText.ErrorLevel.SegmentPairLevel, PluginResources.Error_NumberAdded);
            }
        }
Пример #5
0
        public void Verify(string sourceText, string targetText, INumberVerifierSettings settings, out NumberTexts sourceNumberTexts, out NumberTexts targetNumberTexts, List <ExcludedRange> sourceExcludedRanges = null, List <ExcludedRange> targetExcludedRanges = null)
        {
            _settings   = settings;
            _sourceText = sourceText?.Normalize(System.Text.NormalizationForm.FormKC);
            _targetText = targetText?.Normalize(System.Text.NormalizationForm.FormKC);

            if (_sourceText is null && _targetText is null)
            {
                sourceNumberTexts = null;
                targetNumberTexts = null;
                return;
            }

            _sourceThousandSeparators = GetAllowedThousandSeparators(true);
            _sourceDecimalSeparators  = GetAllowedDecimalSeparators(true).Select(Regex.Unescape).ToList();

            _targetThousandSeparators = GetAllowedThousandSeparators(false);
            _targetDecimalSeparators  = GetAllowedDecimalSeparators(false).Select(Regex.Unescape).ToList();

            _sourceNumberAreaSeparatorsList = GetSourceNumberAreaSeparators();
            _targetNumberAreaSeparatorsList = GetTargetNumberAreaSeparators();

            Verify(out sourceNumberTexts, out targetNumberTexts, sourceExcludedRanges, targetExcludedRanges);
        }