Auswählen einer wahrscheinlichsten Option aus der Liste basierend auf der Benutzerexteingabe

11

Ich arbeite an einer OCR-Anwendung, bei der ich eine Option basierend auf der Benutzereingabe auswählen muss.

Ex:
Available Options:
["python", "ruby", "java", "clojure", "haskell"]

Input: kava
Output: java

Input: ruby
Output: ruby

Input: clujuro
Output: clojure

etc.. 

Meine Anwendung basiert auf Python. Gibt es bereits einen Algorithmus, um dieses Problem zu lösen?

Shiv Deepak
quelle
1
Es mag sich nicht lohnen, es jetzt zu korrigieren, aber IMO wäre ein passenderer Titel "wie man den Abstand (Unterschied) zwischen Saiten bestimmt"
Jeff Welling
3
@ Jeff: Und dann würde ich diese Frage nie finden, weil ich keine Ahnung hätte, dass das, was ich brauche, "der Entfernungsunterschied" genannt werden könnte ... Und das ist nicht der einzige Grund, die Lösung, die Sie brauchen, nicht in die zu setzen Frage. Es kann Menschen daran hindern, alternative Lösungen für das Problem vorzuschlagen, das Sie tatsächlich haben. Ein typisches Beispiel: die Antwort von Loudsight.
Marjan Venema
1
Mein Punkt war, jetzt , dass Sie tun , wissen sie , einen genaueren Titel mit Hilfe Antworten von Menschen anziehen kann , die nicht wissen , was „wie ein wahrscheinlichstes wählen ...“ bedeutet aber wer würde „Abstand zwischen Saiten“ erkennen, aber jedem sein eigenes. Es war nur ein Vorschlag. Ich wusste nicht, was du meinst und habe fast nicht auf deine Frage geklickt, weil das alles ist.
Jeff Welling

Antworten:

10

Dies erfolgt durch Algorithmen der Kategorie " Approximate String Matching ". Ein gängiges Maß für den Vergleich zweier Zeichenfolgen ist der Levenshtein-Abstand . Es gibt eine Python - Implementierung zur Verfügung hier .

Sie vergleichen den Eingang grundsätzlich mit den möglichen Ausgängen und wählen den mit dem geringsten Abstand zum gewünschten Ausgang.

Der Wikipedia-Artikel erwähnt auch verschiedene andere Algorithmen, die Sie ausprobieren können, falls Sie etwas Spezifischeres benötigen.

Falke
quelle
Ich hatte ein ähnliches Problem mit Ruby und genau so habe ich es gelöst.
Jeff Welling