Ungefähre string-matching
Ich weiß, diese Frage wurde gebeten, eine Menge Zeit.
Ich möchte einen Vorschlag machen, welcher Algorithmus ist geeignet für approximate string matching.
Die Anwendung ist speziell für Unternehmen name matching nur und sonst nichts.
Die größte Herausforderung ist wohl die Firma end-name-Teil und kurzen Namen Teil
Beispiel:
1. companyA pty ltd vs companyA pty. ltd. vs companyA
2. WES Engineering vs W. E. S. Engineering (sehr Seltenes Ereignis)
Denkst du Levenshtein Edit-Distanz ist angemessen?
Ich bin mit C#
Grüße,
Max
- Ich denke, ich werde entfernen Sie alle dot char und verwenden Sie dann die levenshtein-Distanz danach. Nur eine Anmerkung, ich fand einen anderen Algorithmus, der ähnlich ist, aber schneller als levenshtein, der Typ, den Namen der Algorithmus sift3. Sehr interessant.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es verschiedene string-Distanz-Metriken, die Sie nutzen könnten.
Ich würde empfehlen,Jaro-Winkler. Im Gegensatz zu edit-Abstand, bei dem das Ergebnis eines Vergleichs ist in diskreten Einheiten von Bearbeitungen, die JW bietet Ihnen eine 0-1-score. Es eignet sich besonders für Eigennamen. Auch ein Blick auf dieses nette tutorial und diese Frage ALSO.
Ich nicht gearbeitet habe mit C# aber hier sind einige Implementierungen von JW, die ich online gefunden:
Impl 1 (Sie haben die DOT NET-version, wenn Sie einen Blick auf die Datei-Liste)
Impl 2
Wenn Sie wollen ein bisschen mehr ausgefeilte matching, können Sie versuchen zu tun, einige benutzerdefinierte Normalisierung von Wortformen Häufig vorkommende, im Namen von Unternehmen wie
ltd/limited, inc/incorporated, corp/corporation
zu berücksichtigen, für den Fall, Unempfindlichkeit, Abkürzungen etc. Auf diese Weise, wenn Sie berechnensollten Sie bekommen die Ergebnis 0 anstatt 14 (das ist, was Sie erhalten würden, wenn Sie berechnet die levenshtein edit-Distanz).
Ja, die Levenshtein-Distanz geeignet ist. Es wird Arbeit für alle diejenigen, die Sie aufgeführt haben, mindestens.
Könnte man auch evtl. Soundex -, aber ich glaube nicht, du wirst es brauchen.
In diesen einfachen Beispielen nur das entfernen aller nicht-alpha-numerische Zeichen gibt Ihnen ein Spiel, und ist die einfachste zu tun, was Sie können pre-Berechnung der Daten auf jeder Seite, dann direkt gleich match, welches deutlich schneller sein wird als die cross-Multiplikation und der Berechnung der edit-Distanz.
Ich habe meine Antwort schon in einer anderen Frage.
https://stackoverflow.com/a/30120166/2282794
Habe ich wirklich großen Maßstab mit ähnlichen Namen-matching-Anforderungen, die Sie gesprochen haben.
Name matching ist nicht sehr einfach und die Reihenfolge der ersten und letzten Namen können unterschiedlich sein.
Einfache fuzzy-name-matching-algorithmen kläglich in solchen Szenarien.
Wenn wir einfach nur reden wollen über die Ungefähre String-matching-algorithmen, dann gibt es viele. Einige von Ihnen sind: Jaro-Winkler, Edit-Distanz(Levenshtein), Jaccard ähnlichkeit, Soundex - /Phonetik-basierten algorithmen etc. Ein einfaches googeln würde uns alle details.
Implementieren Sie können alle von Ihnen in C#
Ironie ist, Sie arbeiten, während Sie versuchen, passen zwei gegebene Eingabe-strings. Okay theoretisch zu demonstrieren und die Art und Weise verschwommen oder Ungefähre string-matching funktioniert.
Jedoch grob untertrieben Punkt ist, wie gehen wir mit der gleichen in der Produktion-Einstellungen. Nicht alle, die ich kenne, die wurden scouting für eine Ungefähre string-matching-Algorithmus, der wusste, wie man Sie lösen könnte, das gleiche in der Produktionsumgebung.
Könnte ich haben gerade darüber gesprochen, Lucene, die spezifisch für Java, aber es ist Lucene für .Auch Net.
https://lucenenet.apache.org/