Comparer les algorithmes de similarité

je veux utiliser des fonctions de similarité de chaîne pour trouver des données corrompues dans ma base de données.

je suis tombé sur plusieurs d'entre eux:

je voulais savoir quelle est la différence entre eux et dans quelles situations ils fonctionnent le mieux?

38
demandé sur menjaraz 2012-03-23 19:43:05

2 réponses

développer mon commentaire wiki-walk dans l'errata et notant que le rez-de-chaussée de la littérature sur la comparabilité des algorithmes qui s'appliquent à des problèmes similaires espaces, examinons l'applicabilité de ces algorithmes avant de déterminer s'ils sont numériquement comparables.

À Partir De Wikipedia, Jaro-Winkler:

en informatique et statistique, la distance Jaro-Winkler (Winkler, 1990) est une mesure de la similitude entre deux chaînes de caractères. Il est une variante de la métrique de distance Jaro (jaro, 1989, 1995) et principalement [citation nécessaire] utilisé dans le domaine du couplage d'enregistrements (duplicata détection.) Plus la distance Jaro–Winkler pour deux cordes est élevée,, plus les cordes sont semblables. La métrique de distance Jaro-Winkler est conçu et le mieux adapté pour les cordes courtes telles que les noms de personnes. Le le score est normalisé de telle sorte que 0 équivaut à aucune similitude et 1 est un exact correspondre.

Levenshtein:

en théorie de l'information et en informatique, la distance Levenshtein est une métrique de chaîne pour mesurer la quantité de différence entre deux séquence. Le terme distance d'édition est souvent utilisé pour désigner spécifiquement de Levenshtein.

la distance de Levenshtein entre deux cordes est définie comme minimum nombre de modifications nécessaires pour transformer une chaîne en une autre, avec les opérations d'édition autorisées étant l'insertion, la suppression, ou la substitution d'un seul caractère. Il porte le nom de Vladimir Levenshtein, qui a considéré cette distance en 1965.

distance euclidienne:

en mathématiques, la distance euclidienne ou métrique euclidienne est la distance "ordinaire" entre deux points que l'on mesurerait avec un règle, et est donné par la formule de Pythagore. En utilisant cette formule comme la distance, l'espace euclidien (ou même n'importe quel espace produit intérieur) devient un espace métrique. La norme associée est appelée la norme Euclidienne. La littérature plus ancienne se réfère à la métrique comme Pythagore métrique.

Et codage Q - ou n-gram:

Dans les domaines de la linguistique computationnelle et de la probabilité, un n-gramme est une séquence contiguë de n éléments à partir d'une séquence donnée de texte ou discours. Les éléments en question peuvent être phonèmes, Syllabes, lettre, mots ou paires de bases selon l'application. n-grammes sont extrait d'un corpus de textes ou de discours.

les deux noyaux avantages des modèles n-gram (et des algorithmes qui utilisent il s'agit d'une simplicité relative et de la possibilité d'augmenter l'échelle – en un modèle peut être utilisé pour stocker plus de contexte avec un un compromis espace-temps bien compris, permettant des expériences de petite envergure pour augmentez très efficacement.

le problème est ces algorithmes résoudre différents problèmes qui ont une applicabilité différente dans l'espace de tous les algorithmes possibles pour résoudre le la plus longue sous-suite communemétrique de celle-ci. En fait, tous ces sont encore métriques, comme certains d'entre eux ne remplissent pas les triangle de l'inégalité.

au lieu de sortir de votre chemin pour définir un stratagème douteux pour détecter la corruption de données, le faire correctement: en utilisant sommes et bits de parité pour vos données. n'essayez pas de résoudre un problème beaucoup plus difficile quand une solution plus simple fera l'affaire.

36
répondu MrGomez 2012-03-30 06:28:43

La similarité des chaînes de caractères aide de bien des façons. Par exemple,

  • google vous dire que les résultats sont calculés à l'aide de similarité de chaînes.
  • la similarité des chaînes est utilisée pour corriger les erreurs OCR.
  • la similarité de la chaîne de caractères est utilisée pour corriger les erreurs de saisie du clavier.
  • la similarité des chaînes est utilisée pour trouver la séquence la plus proche de deux ADN en bioinformatique.

mais comme une taille ne convient pas tous. Chaque similarité de chaîne l'algorithme est conçu pour une utilisation précise bien que la plupart d'entre eux sont similaires. Par exemple,Levenshtein_distance est à propos du nombre de caractères que vous changez pour faire deux chaînes égales.

kitten → sitten

ici la distance est de 1 changement de caractère. Vous pouvez donner différents poids à la suppression, l'ajout et la substitution. Par exemple, les erreurs OCR et les erreurs clavier donnent moins de poids pour certains changements. ROC (certains caractères sont très semblables aux autres), clavier certains caractères sont très proches les uns des autres. La similarité bioinformatique des cordes permet beaucoup d'insertion.

votre second exemple de" Jaro-Winkler la métrique de distance est conçue et convient le mieux aux chaînes courtes telles que les noms de personnes"

par conséquent, vous devriez garder à l'esprit votre problème.

je veux utiliser des fonctions de similarité de chaîne pour trouver des données corrompues dans ma base de données.

comment vos données sont corrompues? Est-ce une erreur de l'utilisateur , semblable à clavier d'entrée d'erreur? Ou est-ce similaire à des erreurs OCR? Ou tout autre chose?

2
répondu Atilla Ozgur 2012-03-29 20:36:55