private (int WordMatchScore, decimal WeightedScore) GetAnswerScore(string lineToMatch, string answer, IEnumerable <WordFrequency> docWordFrequency) { var wordMatches = StringProcessor.GetUniqueWordMatch(lineToMatch, answer, _commonWords); var standardUpperLimit = docWordFrequency.Max(w => w.Frequency); var wordPriorityScore = 0; foreach (var word in wordMatches) { var relativeWordPriority = standardUpperLimit - (docWordFrequency.FirstOrDefault(iw => iw.Word == word)?.Frequency ?? 0); wordPriorityScore += relativeWordPriority; } var weightedScore = (wordPriorityScore / (decimal)answer.Length) * 10000; return(wordPriorityScore, Math.Round(weightedScore, 2)); }