web-dev-qa-db-fra.com

Comparer les algorithmes de similitude

Je souhaite utiliser des fonctions de similitude de chaînes pour trouver des données corrompues dans ma base de données.

Je suis tombé sur plusieurs d'entre eux:

  • Jaro,
  • Jaro-Winkler,
  • Levenshtein,
  • Euclidienne et
  • Q-gram,

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

40
Ali

En développant mon commentaire wiki-walk dans les errata et notant une partie de la littérature du rez-de-chaussée sur la comparabilité des algorithmes qui s'appliquent à des espaces problématiques similaires, explorons l'applicabilité de ces algorithmes avant de déterminer s'ils sommes numériquement comparables.

De Wikipédia, Jaro-Winkler :

En informatique et statistique, la distance Jaro-Winkler (Winkler, 1990) est une mesure de similitude entre deux chaînes. Il s'agit d'une variante de la métrique de distance Jaro (Jaro, 1989, 1995) et principalement [citation nécessaire] utilisée dans le domaine du couplage d'enregistrements (détection des doublons). Plus la distance Jaro – Winkler pour deux chaînes est élevée, plus les chaînes sont similaires. La métrique de distance Jaro – Winkler est conçue et convient mieux aux chaînes courtes telles que les noms de personne. Le score est normalisé de telle sorte que 0 équivaut à aucune similitude et 1 est une correspondance exacte.

distance Levenshtein:

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

La distance Levenshtein entre deux chaînes est définie comme le nombre minimum de modifications nécessaires pour transformer une chaîne en une autre, les opérations d'édition autorisées étant l'insertion, la suppression ou la substitution d'un seul caractère. Il est nommé d'après 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 une règle, et est donnée par la formule de Pythagore. En utilisant cette formule comme distance, l'espace euclidien (ou même n'importe quel espace de 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 métrique de Pythagore.

Et Encodage Q ou n-gram:

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

Les deux principaux avantages des modèles à n grammes (et des algorithmes qui les utilisent) sont la simplicité relative et la capacité à évoluer - en augmentant simplement le modèle na peut être utilisé pour stocker plus de contexte avec un compromis espace-temps bien compris, permettant ainsi de petites expériences pour évoluer très efficacement.

Le problème est que ces algorithmes résolvent différents problèmes qui ont une applicabilité différente dans l'espace de tous les algorithmes possibles pour résoudre le problème la plus longue sous-séquence commune , dans vos données ou en greffant un métrique utilisable de celui-ci. En fait, tous ces éléments ne sont même pas métriques, car certains d'entre eux ne satisfont pas l'inégalité du triangle .

Au lieu de vous efforcer de définir un schéma douteux pour détecter la corruption de données, faites-le correctement: en utilisant checksums et bits de parité N'essayez pas de résoudre un problème beaucoup plus difficile lorsqu'une solution plus simple fera l'affaire.

39
MrGomez

La similitude des chaînes aide de différentes manières. Par exemple

  • les résultats de Google signifient-ils sont calculés en utilisant la similitude des chaînes.
  • la similitude des chaînes est utilisée pour corriger les erreurs OCR.
  • la similitude des chaînes est utilisée pour corriger les erreurs de saisie au clavier.
  • la similitude des chaînes est utilisée pour trouver la séquence la plus correspondante de deux ADN en bioinformatique.

Mais comme une taille ne convient pas à tous. Chaque algorithme de similitude de chaînes est conçu pour un usage spécifique, bien que la plupart d'entre eux soient similaires. Par exemple Levenshtein_distance correspond au nombre de caractères que vous modifiez pour rendre deux chaînes égales.

kitten → sitten

Ici, la distance correspond à un changement de caractère. Vous pouvez attribuer différents poids à la suppression, à l'ajout et à la substitution. Par exemple, les erreurs OCR et les erreurs de clavier donnent moins de poids à certaines modifications. OCR (certains caractères sont très similaires aux autres), clavier certains caractères sont très proches les uns des autres. La similitude bioinformatique des cordes permet beaucoup d'insertion.

Votre deuxième exemple de " Jaro – Winkler métrique de distance est conçu et convient mieux aux chaînes courtes telles que les noms de personnes"

Par conséquent, vous devez garder à l'esprit votre problème.

Je souhaite utiliser des fonctions de similitude de chaînes pour trouver des données corrompues dans ma base de données.

Comment vos données sont corrompues? S'agit-il d'une erreur utilisateur, similaire à une erreur de saisie au clavier? Ou est-ce similaire aux erreurs OCR? Ou autre chose entièrement?

2
Atilla Ozgur