Mam listę ciągów w pliku A
i pliku B
. Chcę pobrać każdy ciąg z pliku A i znaleźć najbardziej podobny ciąg z pliku B.
W tym celu szukam narzędzia, które zapewnia rozmyte porównywanie.
na przykład:
$ fuzzy_compare "Some string" "Some string"
100
Gdzie 100 to jakiś współczynnik równości. Na przykład odległość Levenshteina .
Czy jest jakieś narzędzie? Nie chcę wymyślać koła na nowo.
Odpowiedzi:
Znalazłem tę stronę, która zawiera implementacje algorytmu odległości Levenshteina w różnych językach. Na przykład w bashu możesz wykonać:
Zapisz to jako
~/bin/levenshtein.sh
, utwórz plik wykonywalny (chmod a+x ~/bin/levenshtein.sh
) i uruchom go na dwóch plikach. Na przykład:To jest dobre dla kilku wzorów, ale będzie bardzo powolne dla większych plików. Jeśli to jest problem, wypróbuj jedną z implementacji w innych językach. Na przykład Perl:
Jak wyżej, zapisz skrypt jako
~/bin/levenshtein.pl
i ustaw, aby był wykonywalny i uruchom go z dwoma plikami jako argumentami:Nawet w bardzo małych plikach tutaj Perl jest 10 razy szybszy niż bash:
źródło