Frage

Das Problem ist, gibt es eine Datenbank mit rund 20k Kundendaten und ich möchte das Beste zu tun, um doppelte Einträge zu vermeiden. Die Datenbank ist Microsoft SQL Server 2005, die Anwendung, die behauptet, dass Datenbank Microsoft Dynamics / SL. Ich erstelle einen ASP.NET-Webservice, der mit dieser Datenbank interagiert. Mein Service kann von Kundendaten in die Datenbank einfügen, lesen Sie Datensätze aus es, oder die Datensätze ändern. Entweder in meinem Webservice oder über MS Dynamics oder in SQL Server, würde Ich mag eine Liste möglicher Übereinstimmungen geben, bevor ein Benutzer einen neuen Datensatz hinzufügen bestätigt.

So ist der Benutzer einen Datensatz einreichen würde, wenn es einzigartig zu sein scheint, wird der Datensatz speichern und eine neue ID zurück. Wenn es möglich Vervielfältigungen sind, kann der Benutzer dann erneut mit einer Bestätigung und sagte: „Ja, ich habe die möglichen Dubletten zu sehen, das ist ein neuer Rekord, und ich möchte es unterbreiten“.

Das ist einfach, wenn es nur ein Satzzeichen oder Raum Sache ist (wie zum Beispiel, wenn Sie die Eingabe von „Company, Inc.“ und es gibt eine „Company Inc“ in der Datenbank, aber was, wenn es geringfügige Änderungen wie " Unternehmen Corp.“anstelle von‚Company Inc‘oder wenn es einen fetten gefingert misspelling ist, wie‚cmpany, Inc.‘ist es sogar möglich, Datensätze zurück wie in der Liste? wenn es absolut nicht möglich ist, werde ich umgehen mit dem, was ich habe. Es ist mehr Arbeit nur später verursacht, wenn Aufzeichnungen aufgrund Vervielfältigungen zusammengeführt werden müssen.

War es hilfreich?

Lösung

Die Besonderheiten, die Algorithmus wird am besten für Sie arbeiten stark auf Ihrer Domain abhängen, so würde ich mit einem paar verschiedenen, zu experimentieren vorschlagen - Sie können sogar ein paar, um optimale Ergebnisse zu erzielen kombinieren müssen. Abkürzungen, insbesondere domänenspezifisch diejenigen, müssen möglicherweise auch vorverarbeitet oder standardisiert werden.

Für die Namen, dann würden Sie wahrscheinlich am besten dran mit einem Laut Algorithmus - der berücksichtigt Aussprache. Diese werden punkten Smith und Schmidt eng zusammen, da sie leicht zu verwechseln, wenn sagen die Worte. Double Metaphone ist eine gute erste Wahl.

Für Fett finger, dann würden Sie wahrscheinlich besser dran mit einem Editierdistanz Algorithmus - was einen „Unterschied“ zwischen zwei Wörtern. Diese würden punkten Smith und Smoth zusammen schließen -. Obwohl die 2 durch den Laut Suche verrutschen kann

T-SQL hat SOUNDEX und UNTERSCHIED - aber sie sind ziemlich arm. Ein Levenshtein Variante ist die kanonische Wahl, aber es gibt andere gute Wahl - die meisten davon sind ziemlich einfach zu implementieren in C #, wenn Sie eine entsprechend lizenzierte Implementierung nicht finden können.

Alle diese werden viel einfacher sein, um Code / Verwendung von C # als T-SQL (obwohl ich gefunden double metaphone in einem schrecklichen Missbrauch von T-SQL , die in SQL arbeiten kann).

Obwohl dieses Beispiel ist in Access (und ich habe eigentlich nie auf dem Code angesehen oder verwendet, um die Implementierung) die mitgelieferte Präsentation gibt eine ziemlich gute Vorstellung davon, was Sie wahrscheinlich am Ende brauchen zu tun. Der Code ist wahrscheinlich ein Blick wert, und vielleicht ein Port von VBA.

Andere Tipps

Schauen Sie in SOUNDEXing innerhalb von SQL Server. Ich glaube, es wird Ihnen die Unschärfen der wahrscheinlichen Übereinstimmungen, die Sie suchen.

SOUNDEX @ MSDN

SOUNDEX @ Wikipedia

Wenn es möglich ist Lucene.NET in Ihre solutionm zu integrieren, sollten Sie auf jeden Fall versuchen es aus.

Sie könnten versuchen, Volltextsuche mit Freetext (oder FREETEXTTABLE) Funktionen zu versuchen, mögliche Übereinstimmungen zu finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top