in src/cs/Microsoft.PhoneticMatching/Matchers/ContactMatcher/EnContactMatcher.cs [43:87]
public EnContactMatcher(IList<Contact> contacts, Func<Contact, ContactFields> extractContactFields, MatcherConfig config)
: base(config)
{
var targetEqualityComparer = new TargetEqualityComparer();
HashSet<Target<Contact>> nameTargets = new HashSet<Target<Contact>>(targetEqualityComparer);
HashSet<Target<Contact>> aliasTargets = new HashSet<Target<Contact>>(targetEqualityComparer);
this.nameMaxWindowSize = 1;
this.aliasMaxWindowSize = 1;
for (int idx = 0; idx < contacts.Count; ++idx)
{
var contact = contacts[idx];
var fields = extractContactFields(contact);
if (fields.Name != null)
{
var name = Preprocessor.PreProcess(fields.Name);
var nameVariations = this.AddNameVariations(contact, name, idx);
this.nameMaxWindowSize = Math.Max(this.nameMaxWindowSize, nameVariations.Count);
foreach (var variation in nameVariations)
{
nameTargets.Add(variation);
}
}
if (fields.Aliases != null)
{
foreach (var aliasName in fields.Aliases)
{
var aliasVariations = this.AddNameVariations(contact, aliasName, idx);
this.aliasMaxWindowSize = Math.Max(this.aliasMaxWindowSize, aliasVariations.Count);
foreach (var variation in aliasVariations)
{
aliasTargets.Add(variation);
}
}
}
}
this.nameFuzzyMatcher = new EnHybridFuzzyMatcher<Target<Contact>>(nameTargets.ToArray(), this.Config.PhoneticWeightPercentage, (contact) => contact.Phrase);
this.aliasFuzzyMatcher = new EnHybridFuzzyMatcher<Target<Contact>>(aliasTargets.ToArray(), this.Config.PhoneticWeightPercentage, (contact) => contact.Phrase);
}