Kann ich Activerecord verwenden, um Zeilen zu finden, basierend auf Nearest-Match (levenshtein Entfernung)

StackOverflow https://stackoverflow.com/questions/1163528

Frage

Ich habe eine Tabelle von Strings in meiner Datenbank. Ich wähle eine von ihnen, A .

Wie kann ich den Rest der Tabelle suchen die Zeichenfolge am ähnlichsten A

finden
War es hilfreich?

Lösung

Ich glaube, Sie für die Levenstein Entfernung suchen. Der Levenstein Abstand zwischen zwei String, ist, wie viel das Hinzufügen / Löschen / Modifizieren Zeichen benötigt wird, um die Zeichenfolge gleich zu machen.

Hier ist eine Implementierung in Ruby

Andere Tipps

Wenn Sie nach der klanglichen Ähnlichkeit zwischen zwei Strings sind, können Sie die SQL soundex Funktion nutzen konnten (es auch in Oracle metaphone ist).

Dies wird die Zeichenfolge übergeben, um es in einen 4-stelligen Code (1 Buchstabe, 3 Nummern iirc) umwandeln, die den Laut Klang des Wortes darstellt (s).

Wenn Sie dies tun, um beide der Saiten Sie vergleichen, wenn sie klanglich ähnlich sind, dann können Sie die Codes entsprechen.

Hier ist eine einfache Implementierung der Levenshtein Entfernung Algorithmus in Ruby:

def levenshtein(a, b)
  case
    when a.empty?: b.length
    when b.empty?: a.length
    else [(a[0] == b[0] ? 0 : 1) + levenshtein(a[1..-1], b[1..-1]),
          1 + levenshtein(a[1..-1], b),
          1 + levenshtein(a, b[1..-1])].min
  end
end

Der Levenshtein Abstand zwischen zwei Zeichenkette durch die minimale Anzahl von Operationen gegeben wird benötigt, um eine Zeichenkette in die andere zu transformieren, wobei eine Operation eine Insertion, Deletion oder Substitution eines einzelnen Zeichens.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top