У меня есть список строк в файле A
и файле B
. Я хочу взять каждую строку в файле A и найти наиболее похожую строку в файле B.
Для этого я ищу инструмент, который обеспечивает нечеткое сравнение.
например:
$ fuzzy_compare "Some string" "Some string"
100
Где 100 - это некоторое соотношение равенства. Например расстояние Левенштейна .
Есть ли какая-нибудь полезность? Я не хочу изобретать велосипед.
Ответы:
Я нашел эту страницу, которая предоставляет реализации алгоритма расстояния Левенштейна на разных языках. Так, например, в bash вы можете сделать:
Сохраните это как
~/bin/levenshtein.sh
, сделайте его исполняемым (chmod a+x ~/bin/levenshtein.sh
) и запустите его на ваших двух файлах. Например:Это хорошо для нескольких шаблонов, но будет очень медленным для больших файлов. Если это проблема, попробуйте одну из реализаций на других языках. Например, Perl:
Как и выше, сохраните скрипт как
~/bin/levenshtein.pl
и сделайте его исполняемым и запустите его с двумя файлами в качестве аргументов:Даже в очень маленьких файлах, используемых здесь, подход Perl в 10 раз быстрее, чем bash:
источник