Ich habe eine Liste von Zeichenfolgen in Datei A
und Datei B
. Ich möchte jeden String in Datei A nehmen und den ähnlichsten String in Datei B finden.
Dafür suche ich ein Tool, das unscharfe Vergleiche ermöglicht.
beispielsweise:
$ fuzzy_compare "Some string" "Some string"
100
Wobei 100 ein Gleichheitsverhältnis ist. Zum Beispiel Levenshtein Abstand .
Gibt es ein Dienstprogramm? Ich möchte das Rad nicht neu erfinden.
Antworten:
Ich habe diese Seite gefunden, die Implementierungen des Levenshtein-Entfernungsalgorithmus in verschiedenen Sprachen enthält. Zum Beispiel könnten Sie in bash Folgendes tun:
Speichern Sie das als
~/bin/levenshtein.sh
, machen Sie es ausführbar (chmod a+x ~/bin/levenshtein.sh
) und führen Sie es auf Ihren zwei Dateien aus. Beispielsweise:Das ist für einige Muster in Ordnung, wird aber für größere Dateien sehr langsam. Wenn dies ein Problem ist, versuchen Sie eine der Implementierungen in anderen Sprachen. Zum Beispiel Perl:
Speichern Sie das Skript wie oben,
~/bin/levenshtein.pl
machen Sie es ausführbar und führen Sie es mit den beiden Dateien als Argumente aus:Selbst in den hier verwendeten sehr kleinen Dateien ist der Perl-Ansatz zehnmal schneller als der Bash-Ansatz:
quelle