/// <summary> /// Updates Score in array and return it /// </summary> /// <param name="startIndex">Start index of term to calculate split set score</param> /// <param name="endIndex">End index of term to calculate split set score</param> /// <returns>Split Set Score</returns> private SplitSetScore PopulateBestSplitSetScore(int startIndex, int endIndex) { for (int startPosition = endIndex; startPosition >= startIndex; startPosition--) { List <SplitPositionWithIdentification> possibleIndexes = TokenDictionary.GetPossibleEndIndexesList(_term, startPosition, endIndex); SplitSetScore bestSplitSetScore = null; for (int currentSplitPosition = startPosition; currentSplitPosition <= endIndex; currentSplitPosition++) { SplitPositionWithIdentification splitPositionWithIdentification = possibleIndexes.FirstOrDefault(x => x.Position == currentSplitPosition) ?? new SplitPositionWithIdentification(currentSplitPosition, SplitIdentification.Unidentified); SplitSetScore splitSetScore = new SplitSetScore(splitPositionWithIdentification, GetBestSplitSetScore(currentSplitPosition + 1), startPosition); if (splitSetScore.IsBetterThan(bestSplitSetScore)) { bestSplitSetScore = splitSetScore; } } _splitSetScores[startPosition] = bestSplitSetScore; } return(_splitSetScores[startIndex]); }
internal SplitSetScore(SplitPositionWithIdentification splitPositionWithIdentification, SplitSetScore nextSplitSetScore, int startIndex) { _startIndex = startIndex; _endIndex = splitPositionWithIdentification.Position; if (SplitterUtility.IsNotUnidentified(splitPositionWithIdentification.SplitIdentification)) { _identification = splitPositionWithIdentification.SplitIdentification; _identifiedSplitCount = 1; int length = _endIndex - _startIndex + 1; if (_identification == SplitIdentification.Identified) { _lettersInWordCount = length; } else { _lettersInTokenCount = length; } } _totalSplitsCount = 1; AddScore(nextSplitSetScore); }