Levenshtein en VBA
J'ai une feuille excel avec les données que je veux obtenir de Levenshtein entre eux. J'ai déjà essayé d'exporter en tant que texte, lu à partir d'un script (php), exécution de Levenshtein (calculer la Distance de Levenshtein), l'enregistrer dans excel.
Mais je suis à la recherche d'un moyen de par programmation à calculer une Distance de Levenshtein en VBA. Comment pourrais-je aller sur le faire?
- Pourquoi une telle incroyablement utile post fermé? J'ai écouté tous les podcast, comme il était en cours de construction, et bien que cela puisse être dans la lettre de la loi, ce n'est certainement pas dans l'esprit de pourquoi a été construit. Triste.
- D'accord. La question ne dispose pas d'un effort, mais beaucoup le font. Et de la raison en est que de mal car il peut être, à mon avis.
Vous devez vous connecter pour publier un commentaire.
Traduit de l' Wikipédia :
?Levenshtein("samedi","dimanche")
3
Integer
déclare doit utiliser moins de mémoire et d'être plus rapides, mais ils sont maintenant automatiquement converties enLong
type coulisses (source: MSDN sur ceci trop). Donc, pour marginal de l'augmentation de la performance, les déclarant tous commeLong
enregistre sur la conversion interne de temps (de quelques autres réponses je vois ont fait usage de cette). OU, si vos cordes sont en vertu de 255 caractères, déclarer queBytes
car cela nécessite moins de mémoire queInteger
.Grâce à smirkingman pour le bon code postal. Ici est une version optimisée.
1) l'Utilisation de l'Asc(Mid$(s1, i, 1) à la place. Numérique comparaison est généralement plus rapide que le texte.
2) Utilisez Mid$ istead de Milieu des depuis le, plus tard, est la variante du ver. et en ajoutant $ est la chaîne de ver.
3) l'Utilisation de fonction d'application pour min. (préférence personnelle uniquement)
4) l'Utilisation d'Entiers puisque c'est ce qu'excel utilise en mode natif.
Mise à JOUR:
Pour ceux qui le veulent: je pense qu'il est sûr de dire que la plupart des gens utilisent Levenshtein pour calculer correspondance floue pourcentages. Voici une façon de le faire, et j'ai ajouté une optimisation que vous pouvez spécifier le min. match % de retour (la valeur par défaut est de 70%+. Vous entrez percentags comme "50" ou "80", ou "0" pour exécuter la formule, peu importe).
Le boost de vitesse vient du fait que la fonction va vérifier si il est même possible que c'est le pourcentage de la donner par la vérification de la longueur des 2 chaînes. A noter qu'il existe certains domaines où cette fonction peut être optimisé, mais j'ai gardé ce par souci de lisibilité. J'ai concaténé la distance dans le résultat pour la preuve de la fonctionnalité, mais vous pouvez jouer avec elle 🙂
Utiliser un tableau d'octets pour 17x gain de vitesse
Je pense que c'est encore plus rapide... n'a pas faire beaucoup plus que de l'améliorer de code précédent pour la vitesse et les résultats en %
LCase()
? L'algorithme de Levenshtein est sensible à la casse. C'est le point.