Ich arbeite an einem System, mit dem importierte Dateien in andere Sprachen lokalisiert werden können.Ähnlichkeiten in Strings erkennen
Dies ist meist ein privates Projekt, um MVC3, EntityFramework, LINQ, usw. in den Griff zu bekommen. Deshalb mag ich einige verrückte Dinge, um das Endergebnis aufzupeppen, eines dieser Dinge wäre die Erkennung ähnlicher Strings.
Stellen Sie sich die folgende Liste von Strings haben - von einem Spiel geliehen ich in der Vergangenheit gearbeitet habe:
- Megabeth: Holy Roller Uniform - Mit Kopf, Torso und Beine
- Megabeth: Holy Roller Uniform Kopf
- Megabeth: Holy Roller Uniform Beine
- Megabeth: Holy Roller Uniform Torso
- Megabeth: PAX East 2012 Uniform - Mit Kopf, Torso und Beine
- Megabeth: PAX East 2012 Uniform Kopf
- Megabeth: PAX East 2012 Uniform Beine
- Megabeth: PAX East 2012 Uniform Torso
Wie Sie sehen können, sobald der Benutzer die ersten 4 Strings übersetzt haben, die folgenden 4 teilen sich eine Menge von Ähnlichkeiten, in diesem Fall:
- Megabeth
- Uniform
- Ist mit Kopf, Torso und Beine
- Kopf
- Beine
- Torso
Betrachten Sie die ersten 4 Strings sind in der Tat bereits übersetzt, wenn ein Benutzer die fünfte Saite aus der Liste auswählt, welche Art von Algorithmus oder Technik kann ich verwenden, um dem Benutzer die erste Zeichenfolge (und möglicherweise andere) unter einer Unterüberschrift "Ähnliche Zeichenfolgen" zu zeigen?
Bearbeiten - Ein kleiner Kommentar zum Levenshtein Entfernung: Ich bin derzeit auf 10k Strings in der Datenbank. Levenshtein Distance vergleicht String pro String, also in diesem Fall 10k x (10k -1) mögliche Kombinationen. Wie würde ich das auf eine machbare Weise angehen? Gibt es eine bessere Lösung für diesen speziellen Algorithmus?
Interessante Frage. Ich weiß nicht, wo ich anfangen soll, das zu beantworten, aber krank rumhängen und zusehen. – Gallen
Entfernung bearbeiten. Das hat viele Varianten. und ziemlich geradlinig. kann rechenintensiv sein, wenn Ihre Matrix groß wird. – DarthVader
Sie könnten alle Zeichenketten darstellen, dann durch Leerraum teilen (mit Regex), dann linq es mit '.Distint()' und führen Sie eine Übersetzung mit Ersetzen. Das Problem dabei ist, dass nicht alle Sprachen Wort für Wort übersetzen. – Jay