Frage

Ich habe eine generische mit einigen Dateinamen (list1) und ein anderes biggeneric mit einer vollständigen Liste von Namen (LIST2). Ich brauche Namen von LIST1 auf ähnliche in LIST2 entsprechen. Zum Beispiel

LIST1
- **MAIZE_SLIP_QUANTITY_3_9.1.aif**

LIST 2
1- TUTORIAL_FAILURE_CLINCH_4.1.aif
2- **MAIZE_SLIP_QUANTITY_3_5.1.aif**
3- **MAIZE_SLIP_QUANTITY_3_9.2.aif**
4- TUTORIAL_FAILURE_CLINCH_5.1.aif
5- TUTORIAL_FAILURE_CLINCH_6.1.aif
6- TUTORIAL_FAILURE_CLINCH_7.1.aif
7- TUTORIAL_FAILURE_CLINCH_8.1.aif
8- TUTORIAL_FAILURE_CLINCH_9.1.aif
9- TUTORIAL_FAILURE_PUSH_4.1.aif

Ich habe über Sie unter Levenshtein Abstand und verwendet eine Implementierung in einem Framework ( SignumFramework Dienstprogramme ). Sie gibt mir Abstand = 1 in den Zeilen 2 und 3. Aber in meinem Fall der Linie 3 ist ein besseres Spiel als Linie 2.

Gibt es eine andere Methode besser ähnliche Zeichenfolge zu vergleichen? Etwas flexibler?

War es hilfreich?

Lösung

Wenn sie als Zeichenkette zu vergleichen, „9.2“ ist nicht eine bessere Übereinstimmung als „5.1“ für „9.1“. Wenn Sie die Versionsnummern wollen numerisch ausgewertet werden, müssen Sie die Zeichenfolgen analysieren, so dass Sie separat die Streicher und die numerischen Teile vergleichen können.

Andere Tipps

Es gab eine simlar Frage hier , vielleicht einige der Antworten werden dort relevant sein?

Ihre Ähnlichkeitskriterien könnten eine Kombination von mehreren anderen Kriterien sein. Man könnte die Levenshtein-Distanz sein, andere könnten beispiele die längsten gemeinsamen Teilstrings oder Präfix / Suffix.

Die längste gemeinsame Teilzeichen Problem ist eigentlich ein Sonderfall der Edit-Distanz, wenn Substitutionen verboten sind und nur exakte Charakter Spiel, einfügen und löschen sind zulässige Bearbeitungsvorgänge (siehe hier ).

Weitere Kennzahlen für Zeichenfolge Ähnlichkeit beschrieben hier .

Ein regulärer Ausdruck kann verwendet werden, um die Elemente zu erhalten, die mit dem Namen übereinstimmen. Die Versionsnummer könnte in einer Regex-Gruppe im Spiel und analysierte in ein .NET-Objekt gesammelt werden (z dezimal), die Sie vergleichen nutzen könnten, um die man am nächsten war.

Es gibt eine ziemlich erschöpfende Reihe von Antworten href="https://stackoverflow.com/questions/473522/word-comparison-algorithm"> diese SO auf Frage. An der Unterseite ist I-Link für soundex zu C # Implementierungen setzen, doppelt Metaphone, PHP Ähnlichkeit und Levenstein.

scroll top