in src/cs/Microsoft.PhoneticMatching/Matchers/BaseMatcher.cs [41:72]
protected IList<T> SelectMatches(IList<Match<Target<T>>> candidates)
{
var matches = new List<T>();
if (candidates.Count != 0)
{
var bestDistance = candidates[0].Distance;
var maxDistance = Math.Max(
bestDistance * this.Config.BestDistanceMultiplier,
this.Config.MaxDistanceMarginReturns);
var dedupe = new HashSet<int>();
foreach (var candidate in candidates)
{
// supports MaxReturns == 0
if (matches.Count >= this.Config.MaxReturns)
{
break;
}
if (candidate.Distance < maxDistance)
{
if (!dedupe.Contains(candidate.Element.Id))
{
dedupe.Add(candidate.Element.Id);
matches.Add(candidate.Element.Value);
}
}
}
}
return matches;
}