/// <summary> /// Gets corrected form of the text /// </summary> /// <param name="text">Text to be corrected</param> /// <returns>Corrected text. Null is returned if no match is found.</returns> public string Correct(string text) { CorrectionResult result = new CorrectionResult(null, TextCorrectorResources.MaxDistance + 1); int minDictionaryLength = Math.Max(text.Length - TextCorrectorResources.MaxDistance, 1); int maxDictionaryLength = text.Length + TextCorrectorResources.MaxDistance; if (_useDictionary) { CorrectionResult dictionaryCorrectionResult = GetBestDistance(text, _dictionary.GetWordList().Where(x => x.Length <= maxDictionaryLength && x.Length >= minDictionaryLength)); if (dictionaryCorrectionResult.IsBetterThan(result)) { result = dictionaryCorrectionResult; } } if (_useTokenDictionary) { CorrectionResult dictionaryCorrectionResult = GetBestDistance(text, _tokenDictionary.GetProjectIdentifiedsAndTokens().Where(x => x.Length <= maxDictionaryLength && x.Length >= minDictionaryLength)); if (dictionaryCorrectionResult.IsBetterThan(result)) { result = dictionaryCorrectionResult; } } return(result.Text); }
internal bool IsBetterThan(CorrectionResult result) { return(Distance < result.Distance); }