J'ai une liste de chaînes dans un fichier A
et un fichier B
. Je veux prendre chaque chaîne du fichier A et trouver la chaîne la plus similaire dans le fichier B.
Pour cela, je recherche un outil qui propose une comparaison floue.
par exemple:
$ fuzzy_compare "Some string" "Some string"
100
Où 100 est un rapport d'égalité. Par exemple la distance Levenshtein .
Y a-t-il une utilité? Je ne veux pas réinventer la roue.
Réponses:
J'ai trouvé cette page qui fournit des implémentations de l'algorithme de distance Levenshtein dans différentes langues. Ainsi, par exemple en bash, vous pourriez faire:
Enregistrez-le sous
~/bin/levenshtein.sh
, rendez-le exécutable (chmod a+x ~/bin/levenshtein.sh
) et exécutez-le sur vos deux fichiers. Par exemple:C'est très bien pour quelques modèles mais cela deviendra très lent pour les fichiers plus gros. Si c'est un problème, essayez l'une des implémentations dans d'autres langues. Par exemple Perl:
Comme ci-dessus, enregistrez le script sous
~/bin/levenshtein.pl
et rendez-le exécutable et exécutez-le avec les deux fichiers comme arguments:Même dans les très petits fichiers utilisés ici, l'approche Perl est 10 fois plus rapide que celle bash:
la source