2017-06-23 3 views
2

Ich habe eine Tabelle mit Firmennamen. Es gibt viele Duplikate aufgrund menschlicher Eingabefehler. Es gibt unterschiedliche Auffassungen, ob die Unterteilung aufgenommen werden sollten, Tippfehler, etc. Ich alle wollen, dass diese Duplikate als ein Unternehmen „1c“ gekennzeichnet werden:Doppelte Beseitigung ähnlicher Firmennamen

+------------------+ 
|  company  | 
+------------------+ 
| 1c    | 
| 1c company  | 
| 1c game studios | 
| 1c wireless  | 
| 1c-avalon  | 
| 1c-softclub  | 
| 1c: maddox games | 
| 1c:inoco   | 
| 1cc games  | 
+------------------+ 

I Levenshtein distance als eine gute Möglichkeit identifiziert Fehler zu beseitigen. Wenn jedoch die Unterteilung hinzugefügt wird, erhöht sich die Levenshtein-Distanz dramatisch und ist nicht länger ein guter Algorithmus dafür. Ist das richtig?

Im Allgemeinen habe ich kaum Erfahrung in Computerlinguistik, also bin ich ratlos, welche Methoden ich wählen sollte.

Welche Algorithmen würden Sie für dieses Problem empfehlen? Ich möchte es in Java implementieren. Reines SQL wäre auch in Ordnung. Links zu Quellen wären willkommen. Vielen Dank.

+1

Siehe auch: https://stackoverflow.com/questions/429385/how-do-i-normalize-a-large-user-generated-data-set-of-company-names https: // stackoverflow .com/questions/7974972/how-to-normalize-firmennamen https://stackoverflow.com/questions/4835318/normalize-data-according-to-business-entity-legal-name-class-of-business- DNS – polm23

Antwort

1

Dies ist ein schwieriges Problem. Ein magisches Suchwort, das Ihnen helfen könnte, ist "Normalisierung" - während es manchmal sehr unterschiedliche Dinge bedeutet ("Datenbanknormalisierung" ist zum Beispiel nicht verwandt), Sie versuchen effektiv, Ihre Eingabe hier zu normalisieren.

Eine einfache Lösung ist die Verwendung der Levenshtein-Distanz mit Token Awareness. Die Python-Bibliothek Fuzzy Wuzzy macht dies und this blog post stellt vor, wie es mit motivierenden Beispielen funktioniert. Die Grundidee ist einfach genug, dass Sie sie ohne Schwierigkeiten in Java implementieren können. Auf einer hohen Ebene besteht die Idee darin, die Eingabe in Token auf Leerraum und möglicherweise Interpunktion zu teilen, dann die Token zu sortieren und sie als eine Menge zu behandeln, dann die festgelegte Schnittgröße zu verwenden, was eine Fuzzy-Anpassung als Metrik erlaubt .

Einige verwandte Links: