Frage

Ich bin mir dessen bewusst, SOUNDEX und (Doppel -) Metaphone, aber diese lass mich nicht testen wegen der ähnlichkeit der Wörter als ganzes - zum Beispiel "Hallo" klingt sehr ähnlich wie "Tschüs", aber diese beiden Methoden markieren Sie Sie als ganz anders.

Gibt es irgendwelche Bibliotheken in Ruby oder Methoden, die Sie kennen, in der Lage sind, die Bestimmung der ähnlichkeit zwischen zwei Wörtern?(Entweder ein boolean ist/ist nicht vergleichbar, oder numerische 40% ähnlich)

edit: Extra-bonus-Punkte, wenn es eine einfache Methode an 'drop-in' einen anderen Dialekt oder Sprache!

War es hilfreich?

Lösung

Ich denke, Sie beschreiben die levenshtein-Distanz.Und ja, es sind Edelsteine für.Wenn Sie in pure Ruby gehen für den text gem.

$ gem install text

Die docs mehr details, aber hier ist der Haken:

Text::Levenshtein.distance('test', 'test')    # => 0
Text::Levenshtein.distance('test', 'tent')    # => 1

Wenn Sie sind ok mit nativen Erweiterungen...

$ gem install levenshtein

Es Verwendung ist ähnlich.Seine Leistung ist sehr gut.(Es handles ~1000 Rechtschreibkorrekturen pro minute auf meine Systeme.)

Wenn Sie müssen wissen, wie ähnlich sich zwei Wörter sind, verwenden Sie Distanz, über die Wortlänge.

Wenn Sie möchten, eine einfache ähnlichkeit zu testen, sollten Sie etwas wie dieses:

Ungetestet, aber geradlinig:

String.module_eval do
   def similar?(other, threshold=2)
    distance = Text::Levenshtein.distance(self, other)
    distance <= threshold
  end
end

Andere Tipps

Sie können zuerst die Worte vorverarbeiten eine Thesaurus-Datenbank, die Worte mit ähnlicher Bedeutung zu demselben Wort konvertieren. Es gibt verschiedene Thesaurus Datenbanken gibt, leider konnte ich nicht eine anständige kostenlos ein für Englisch finden ( http: / /www.gutenberg.org/etext/3202 ist diejenige, die ich gefunden, aber dies zeigt nicht, welche Beziehungen die spezifischen Wörter haben (wie ähnlich; Gegenteil, alternative Bedeutung, etc.), so dass alle Wörter auf der derselben Zeile einige Beziehung, aber Sie werden nicht wissen, was das Verhältnis ist)

Aber zum Beispiel für ungarische gibt es eine gute kostenlose Thesaurus-Datenbank, aber Sie nicht haben soundex / Metaphone für ungarische Texte ...

Wenn Sie die Datenbank zu schreiben ein Programm, das die Texte vorverarbeitet ist nicht zu hart (schließlich ist es eine einfache Such ersetzen, aber Sie könnten die Thesaurus-Datenbank mit Simplex- oder methaphone vorverarbeiten wollen)

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