Ich muss eine Lösung für eine bestimmte Anforderung codieren, und ich wollte wissen, ob jemand entweder vertraut mit einer Bibliothek ist, die es erreichen kann, oder kann mich anleiten die beste Praxis Beschreibung:Algorithmus zum Vergleichen von Wörtern (nicht alphabetisch)
Der Benutzer gibt ein Wort ein, das eine von mehreren festen Optionen sein soll (ich halte die Optionen in einer Liste). Ich weiß, dass die Eingabe in einem Mitglied in der Liste sein muss, aber da es Benutzereingaben sind, hat er möglicherweise einen Fehler gemacht. Ich suche nach einem Algorithmus, der mir sagt, was das wahrscheinlichste Wort ist, das der Benutzer meinte. Ich habe keinen Kontext und ich kann den Benutzer nicht zwingen, aus einer Liste zu wählen (d. H. Er muss das Wort frei und manuell eingeben können).
Zum Beispiel sagen die Liste enthält die Worte "Wasser", "Viertel", "Bier", "Rüben", "Hölle", "Hallo" und "Aardvark".
Die Lösung für verschiedene Arten von „normal“ Fehler Konto muss:
- Geschwindigkeit Tippfehler (zB Zeichen verdoppelt, Zeichen usw. dropping)
- Keyboard benachbarten Zeichen Fehler (zB „qater“ für „Wasser „)
- Non-native Englisch Tippfehler (zB "quater" für‚Viertel‘)
- Und so weiter ...
Die naheliegende Lösung besteht darin, Buchstabe für Buchstabe zu vergleichen und jedem einzelnen Buchstaben, jedem zusätzlichen Buchstaben und jedem fehlenden Buchstaben "Strafgewichte" zu geben. Aber diese Lösung ignoriert Tausende von "Standard" -Fehlern, von denen ich sicher bin, dass sie irgendwo aufgelistet sind. Ich bin mir sicher, dass es Heuristiken gibt, die sich mit allen spezifischen und allgemeinen Fällen befassen, wahrscheinlich mit einer großen Datenbank von Standard-Mismatches (ich bin offen für datenintensive Lösungen).
Ich bin in Python Codierung, aber ich halte diese Frage sprachunabhängig.
Irgendwelche Empfehlungen/Gedanken?