Je travaille actuellement sur un projet dans lequel un algorithme de correspondance de données doit être implémenté. Un système externe transmet toutes les données qu'il connaît sur un client et le système I doit retourner le client correspondant. Ainsi, le système externe connaît alors l'identifiant correct du client plus il obtient des données supplémentaires ou peut mettre à jour ses propres données du client spécifique.Algorithme de correspondance de données
Les champs suivants sont transmis dans:
- Nom
- Nom2
- Rue
- Ville
- ZipCode
- BankAccountNumber
- BANKNAME
- BANKCODE
- Téléphone
- Fax
- Web
Les données peuvent être de grande qualité et beaucoup d'informations sont disponibles, mais souvent les données est merdique et que le nom et l'adresse est disponible et pourrait avoir des orthographes.
Je suis mise en œuvre du projet en .Net. Ce que je fais actuellement est quelque chose comme ce qui suit:
public bool IsMatch(Customer customer)
{
// CanIdentify just checks if the info is provided and has a specific length (e.g. > 1)
if (CanIdentifyByStreet() && CanIdentifyByBankAccountNumber())
{
// some parsing of strings done before (substring, etc.)
if(Street == customer.Street && AccountNumber == customer.BankAccountNumber) return true;
}
if (CanIdentifyByStreet() && CanIdentifyByZipCode() &&CanIdentifyByName())
{
...
}
}
Je ne suis pas très satisfait de l'approche ci-dessus. C'est parce que je devrais écrire si des déclarations pour tous les cas raisonnables (combinaisons) ainsi je ne manque aucune chance de correspondre à l'entité.
Je pensais que je pourrais créer une sorte de points correspondant. Donc, pour chaque critère correspondant, un score serait ajouté. Comme:
public bool IsMatch(Customer customer)
{
int matchingScore = 0;
if (CanIdentifyByStreet())
{
if(....)
matchingScore += 10;
}
if (CanIdentifyByName())
{
if(....)
matchingScore += 10;
}
if (CanIdentifyBankAccountNumber())
{
if(....)
matchingScore += 10;
}
if(matchingScore > iDontKnow)
return true;
}
Cela me permettrait de prendre en considération toutes les données correspondantes, et en fonction d'un certain poids j'augmenterais le score d'appariement. Si le score est assez élevé, c'est un match.
savoir ma question est: Y a-t-il des meilleures pratiques là-bas pour de telles choses, comme correspondant à des modèles d'algorithme, etc? Merci beaucoup!
Vous voulez dire "fautes d'orthographe" quand vous dites "orthographes", n'est-ce pas? – Svante