Tengo una lista de cadenas en archivo A
y archivo B
. Quiero tomar cada cadena en el archivo A y encontrar la cadena más similar en el archivo B.
Para esto, estoy buscando una herramienta que proporcione una comparación difusa.
por ejemplo:
$ fuzzy_compare "Some string" "Some string"
100
Donde 100 es alguna relación de igualdad. Por ejemplo, la distancia de Levenshtein .
¿Hay alguna utilidad? No quiero reinventar la rueda.
Respuestas:
Encontré esta página que proporciona implementaciones del algoritmo de distancia de Levenshtein en diferentes idiomas. Entonces, por ejemplo en bash, podrías hacer:
Guarde eso como
~/bin/levenshtein.sh
, hágalo ejecutable (chmod a+x ~/bin/levenshtein.sh
) y ejecútelo en sus dos archivos. Por ejemplo:Eso está bien para algunos patrones, pero será muy lento para archivos más grandes. Si eso es un problema, pruebe una de las implementaciones en otros idiomas. Por ejemplo Perl:
Como arriba, guarde el script como
~/bin/levenshtein.pl
y hágalo ejecutable y ejecútelo con los dos archivos como argumentos:Incluso en los archivos muy pequeños utilizados aquí, el enfoque de Perl es 10 veces más rápido que el bash:
fuente