Eu tenho uma lista de seqüências de caracteres em arquivo A
e arquivo B
. Quero pegar cada string no arquivo A e encontrar a string mais semelhante no arquivo B.
Para isso, estou procurando uma ferramenta que ofereça comparações fuzzy.
por exemplo:
$ fuzzy_compare "Some string" "Some string"
100
Onde 100 é alguma razão de igualdade. Por exemplo, distância de Levenshtein .
Existe alguma utilidade? Eu não quero reinventar a roda.
Respostas:
Encontrei esta página que fornece implementações do algoritmo de distância de Levenshtein em diferentes idiomas. Então, por exemplo, no bash, você pode fazer:
Salve como
~/bin/levenshtein.sh
, torne-o executável (chmod a+x ~/bin/levenshtein.sh
) e execute-o em seus dois arquivos. Por exemplo:Isso é bom para alguns padrões, mas fica muito lento para arquivos maiores. Se isso for um problema, tente uma das implementações em outros idiomas. Por exemplo Perl:
Como acima, salve o script como,
~/bin/levenshtein.pl
torne-o executável e execute-o com os dois arquivos como argumentos:Mesmo nos arquivos muito pequenos usados aqui, a abordagem Perl é 10 vezes mais rápida que a do bash:
fonte