Ich habe eine Liste mit + -8000 Elementen, die das Ergebnis ist, nachdem zahlreiche Techniken zum Entfernen von Duplikaten angewendet wurden (die Liste begann bei über 10000 Elementen).
Ich habe jetzt das folgende Problem -
Beispiel 1. Jack Daniel 2. Jack Daniels 3. Jack Daniels
Alle oben genannten Punkte beziehen sich eindeutig auf einen Artikel, sind jedoch technisch immer noch einzigartig. Ich habe versucht, die ersten 4 Buchstaben zu ziehen und nach Übereinstimmungen zu suchen, aber es gab + -4000 und die meisten von ihnen waren falsch positiv, dh
- Jack Dxxx
- Jack Bxxx
Beide würden Jack ziehen, wären aber kein gültiges Duplikat.
Irgendwelche Gedanken?
microsoft-excel
worksheet-function
Brandon
quelle
quelle
Antworten:
Basierend auf Zoredaches Kommentar ist hier meine Beispielarbeitsmappe mit VBA und Levenshtein Distance , um ähnliche Zeichenfolgen in einer großen Liste zu finden. Es basiert auf den Antworten von @smirkingman und @ Apostolos55 zum Stackoverflow .
Ich habe zwei verschiedene Versionen implementiert. Bitte überprüfen Sie, welche Funktion für Ihren Fall mit 8000 Werten schneller ist. Wenn Sie neugierig sind, sehen Sie sich den vollständigen VBA- Code auf Github an . Erhöhen Sie den Schwellenwert in der Zeile,
const treshold = 1
wenn Sie Ergebnisse mit mehr als einer erforderlichen Bearbeitung wünschen, um irgendwo eine Übereinstimmung zu erzielen.=LevenshteinCompare( <cell_to_check> , <range_to_search_in> )
Beispiel:
=LevenshteinCompare(A2;A$2:A$12)
(Beachten Sie den festen Bereich)<number_of_required_edits> - [<match_address>] <match_value>
Das hat Spaß gemacht ☜ (゚ ヮ ゚ ☜)
quelle
COUNTIF
). Dies würde das Entfernen von Duplikaten erleichtern (da Sie nach der zweiten Spalte sortieren / filtern könnten).number of cells which are N edits or less away
. Können Sie erklären, was Sie unter Anzahl der Zellen , Adresse und Gesamtbetrag verstehen ? Wenn Sie die ZeileLevenshteinCompare = newRes & " - [" & newS2row & "] " & newS2
in ändern , sehenLevenshteinCompare = newRes
Sie nur die Mindestanzahl an Änderungen, die erforderlich sind, um mit einer anderen ZelleVerwenden Sie = len und wenn der Unterschied geringer ist, markieren Sie ihn als 2
und so etwas wie = mid (Value, (len_Value - 7), 4) markiert es als möglich betrogen.
In Kombination mit dem, was Sie bereits haben, sollten Sie ein viel besser machbares Set erhalten, mit dem Sie arbeiten können.
Bearbeiten
Formeln wie diese: Beachten Sie, dass "Jack Daniel" <> "Jack Berries" in G2. sieht aber wie ein mögliches Spiel überall anders aus. Sie müssten ein wenig modifizieren, um Ihren spezifischen Anforderungen zu entsprechen, aber es sollte eine überschaubare Anzahl erreichen.
C1 = IF (LINKS (A1,4) = LINKS (B1,4), "T", "F")
D1 = IF (LEN (A1) - LEN (B1) <= 2, "T", "F")
E1 = LEN (A1)
F1 = LEN (B1)
G1 = IF (MID (A1, (E1 - 7), 4) = MID (B1, (E1 - 7), 4), "T", "F")
quelle