Fonction DICECOEFFICIENT( )
Renvoie le coefficient de Dice de deux chaînes de caractères spécifiées : il s'agit de la mesure de la similarité entre deux chaînes.
Syntaxe
DICECOEFFICIENT(chaîne_de_caractères1; chaîne_de_caractères2 <;ngram>)
Paramètres
Nom | Type | Description |
---|---|---|
chaîne_de_caractères1 | caractère | Première chaîne de la comparaison. |
chaîne_de_caractères2 | caractère | Deuxième chaîne de la comparaison. |
ngram optionnel |
numérique |
Longueur en n-gramme à utiliser. Spécifiez un nombre entier, 1 ou supérieur. Augmenter la longueur ngram rend encore plus strict le critère de similarité entre deux chaînes de caractères. Si vous ne spécifiez pas de longueur, c'est la longueur par défaut de 2 qui est utilisée. Les N-grammes sont les sous-chaînes (blocs de caractères) qui se chevauchent et parmi lesquelles les chaînes de comparaison sont divisées dans le cadre du calcul du coefficient de Dice. Pour des informations détaillées, consultez la section Remarques. |
Sortie
Numérique. La valeur est le coefficient de Dice des deux chaînes de caractères, qui représente le pourcentage du nombre total de n-grammes dans les deux chaînes de caractères qui sont identiques. La plage s'étend de 0,0000 à 1,0000 compris.
Exemples
Exemples basiques
Incidence de la longueur en n-grammes sur le résultat
Les trois exemples ci-après comparent les mêmes deux chaînes. Le degré de similarité renvoyé varie selon la longueur en n-grammes spécifiée.
Renvoie 0,9167 (en utilisant la longueur en n-grammes par défaut (2), les n-grammes dans les deux chaînes de caractères sont identiques à 92 %) :
DICECOEFFICIENT("125 SW 39TH ST, Suite 100";"Suite 100, 125 SW 39TH ST")
Renvoie 1,0000 (en utilisant une longueur en n-grammes de 1, les n-grammes dans les deux chaînes de caractères sont identiques à 100 %) :
DICECOEFFICIENT("125 SW 39TH ST, Suite 100";"Suite 100, 125 SW 39TH ST"; 1)
Renvoie 0,8261 (en utilisant une longueur en n-grammes de 3, les n-grammes dans les deux chaînes de caractères sont identiques à 83 %) :
DICECOEFFICIENT("125 SW 39TH ST, Suite 100";"Suite 100, 125 SW 39TH ST"; 3)
Entrée de champ
Renvoie le coefficient de Dice de chaque valeur du champ Adresse lors de la comparaison avec la chaîne de caractères "125 SW 39TH ST, Suite 100" (basé sur la longueur en n-grammes par défaut de 2) :
DICECOEFFICIENT(Adresse;"125 SW 39TH ST, Suite 100")
Exemples avancés
Utilisation d'éléments transposés
En diminuant la longueur en n-grammes et en supprimant les caractères superflus, vous pouvez optimiser DICECOEFFICIENT( ) lorsque vous recherchez des éléments transposés.
Renvoie 0,7368 (en utilisant la longueur en n-grammes par défaut (2), les n-grammes dans les deux chaînes de caractères sont identiques à 74 %) :
DICECOEFFICIENT("John Smith";"Smith, John")
Renvoie 1,0000 (en excluant la virgule entre le nom de famille et le prénom et en utilisant une longueur en n-grammes de 1, les n-grammes dans les deux chaînes de caractères sont identiques à 100 %) :
DICECOEFFICIENT("John Smith"; EXCLUDE("Smith, John"; ","); 1)
Classer des valeurs en fonction de "125 SW 39TH ST, Suite 100"
Créez le champ calculé Co_Dice pour afficher le coefficient de Dice situé entre "125 SW 39TH ST, Suite 100" et chaque valeur dans le champ Adresse :
DEFINE FIELD Co_Dice COMPUTED DICECOEFFICIENT(Adresse;"125 SW 39TH ST; Suite 100")
Ajoutez le champ calculé Co_Dice à la vue, puis effectuez un tri express dans l'ordre décroissant pour classer toutes les valeurs du champ Adresse en fonction de leur similarité avec "125 SW 39TH ST, Suite 100".
Isoler les doublons approximatifs de "125 SW 39TH ST, Suite 100"
Créez un filtre isolant toutes les valeurs du champ Adresse comprises dans un certain degré de similarité avec "125 SW 39TH ST, Suite 100" :
SET FILTER TO DICECOEFFICIENT(Adresse;"125 SW 39TH ST, Suite 100") > 0,5
Modifier le nombre dans l'expression vous permet de régler le degré de similarité dans les valeurs filtrées.
Remarques
Quand utiliser DICECOEFFICIENT( )
Utilisez la fonction DICECOEFFICIENT( ) pour rechercher des valeurs presque identiques (des doublons approximatifs). DICECOEFFICIENT() sert aussi à rechercher les valeurs ayant des contenus identiques ou presque identiques, à l'exception des éléments transposés. Par exemple :
- des numéros de téléphone ou des numéros de sécurité sociale, avec des chiffres transposés
- des versions de la même adresse, mise en forme différemment
Fonctionnement
DICECOEFFICIENT( ) renvoie le coefficient de Dice des deux chaînes de caractères évaluées. Le coefficient de Dice mesure le degré de similarité entre les chaînes, sur une échelle de 0,0000 à 1,0000. Plus la valeur renvoyée est grande, plus les deux chaînes sont similaires :
- 1,0000 : signifie que chaque chaîne de caractères est composée d'un jeu de caractères identique, bien que les caractères puissent être présentés dans un ordre différent et utiliser une casse différente.
- 0,7500 : signifie que les n-grammes dans les deux chaînes de caractères sont identiques à 75 %.
- 0,0000 : signifie que les deux chaînes de caractères n'ont aucun n-gramme (expliqué ci-dessous) en commun ou que la longueur spécifiée du n-gramme utilisé dans le calcul est plus longue que la plus courte des deux chaînes comparées.
Conseils d'utilisation
- Filtre ou tri Filtrer ou trier les valeurs d'un champ en fonction de leur coefficient de Dice identifie les valeurs ressemblant le plus à la chaîne de comparaison.
- Sensibilité à la casse Cette fonction n'est pas sensible à la casse (par ex., « MARTIN » est équivalent à « martin ».
- Espaces de début et de fin La fonction tronque également les espaces de début et de fin dans les champs de manière automatique. Vous n'avez donc pas besoin d'utiliser la fonction TRIM( ) ou ALLTRIM( ) lorsque vous renseignez un champ comme paramètre.
Mode de calcul du coefficient de Dice
Le coefficient de Dice représente le pourcentage du nombre total de n-grammes dans les deux chaînes de caractères qui sont identiques.
Le coefficient de Dice est calculé en divisant d'abord les chaînes de caractères à comparer en n-grammes. Les N-grammes (aussi appelés q-grammes) sont des sous-chaînes ou des blocs de caractères qui se chevauchent, d'une longueur de n. Il est possible de spécifier la longueur de n à l'aide du paramètre ngram ou d'accepter la longueur par défaut de 2.
Deux noms divisés en n-grammes
Ci-dessous les noms « John Smith » et « John D. Smith » sont divisés en n-grammes d'une longueur de 2 et en n-grammes d'une longueur de 3. Les caractères de soulignement indiquent les espaces. Les espaces internes et la ponctuation comptent comme des caractères.
Longueur en n-grammes |
"John Smith" n-grammes |
"Smith, John D." n-grammes |
---|---|---|
2 |
Jo | oh | hn | n_ | _S | Sm | mi | it | th |
Sm | mi | it | th | h, | ,_ | _J | Jo | oh | hn | n_ | _D | D. |
3 |
Joh | ohn | hn_ | n_S | _Sm | Smi | mit | ith |
Smi | mit | ith | th, | h,_ | ,_J | _Jo | Joh | ohn | hn_ | n_D | _D. |
Formule du coefficient de Dice
Une fois que les n-grammes ont été définis pour les deux chaînes de caractères à comparer, le calcul est effectué à l'aide de la formule suivante :
- 2 x nombre de n-grammes en commun / nombre total des n-grammes dans les deux chaînes de caractères
Les n-grammes en commun sont les n-grammes qui apparaissent dans les deux chaînes de caractères. Par exemple, « ABC » et « BCD » ont en commun le n-gramme « BC », en supposant une longueur en n-gramme de 2 (AB | BC et BC | CD).
Exemples de calcul du coefficient de Dice
Le tableau ci-dessous illustre le calcul du coefficient de Dice pour les deux chaînes de caractères, « John Smith » et « John D. Smith », à l'aide de différentes longueurs en n-grammes.
Notez que lorsque la longueur en n-grammes augmente pour la même paire de chaînes de caractères, la valeur du coefficient de Dice diminue, ce qui indique une similarité moindre. Bien que les chaînes de caractères restent identiques, le critère de similarité est plus strict car diviser les chaînes en n-grammes plus longs implique que les séquences de caractères plus longues doivent correspondre à un n-gramme pour être considérées comme n-gramme en commun.
Une autre façon de voir les choses à ce stade serait que la position relative des caractères pèse davantage à mesure que vous augmentez la valeur des n-grammes. Par contraste, la position relative des caractères n'est pas prise en compte lors de l'utilisation d'une longueur en n-grammes de 1. La position relative des caractères renvoie à la position des caractères par rapport aux autres, plutôt qu'à leur position absolue au sein d'une chaîne.
Astuce
Si vous recherchez spécifiquement une transposition, utilisez une longueur en n-gramme de 1.
Longueur en n-grammes |
"John Smith" n-grammes |
"Smith, John D." n-grammes |
n-grammes en commun |
Coefficient de Dice |
---|---|---|---|---|
1 |
J | o | h | n | _ | S | m | i | t | h (10 n-grammes) |
S | m | i | t | h | , | _ | J | o | h | n | _ | D | . (14 n-grammes) |
10 |
2x10 / (10+14) = 0,8333 |
2 (par défaut) |
Jo | oh | hn | n_ | _S | Sm | mi | it | th (9 n-grammes) |
Sm | mi | it | th | h, | ,_ | _J | Jo | oh | hn | n_ | _D | D. (13 n-grammes) |
8 |
2x8 / (9+13) = 0,7273 |
3 |
Joh | ohn | hn_ | n_S | _Sm | Smi | mit | ith (8 n-grammes) |
Smi | mit | ith | th, | h,_ | ,_J | _Jo | Joh | ohn | hn_ | n_D | _D. (12 n-grammes) |
6 |
2x6 / (8+12) = 0,6000 |
4 |
John | ohn_ | hn_S | n_Sm | _Smi | Smit | mith (7 n-grammes) |
Smit | mith | ith, | th,_ | h,_J | ,_Jo | _Joh | John | ohn_ | hn_D | n_D. (11 n-grammes) |
4 |
2x4 / (7+11) = 0,4444 |
DICECOEFFICIENT( ) comparée à ISFUZZYDUP( ) et LEVDIST( )
L'une des principales différences entre la fonction DICECOEFFICIENT( ), la fonction ISFUZZYDUP( ) et la fonction LEVDIST( ), qui utilisent la distance Levenshtein, c'est que la fonction DICECOEFFICIENT( ) ne met pas l'accent sur la position relative des caractères ou des blocs de caractères, voire les ignore, dans les deux chaînes comparées. La position relative est un critère important dans les fonctions basées sur la distance Levenshtein.
Comparaison des valeurs avec transposition
Si vous comparez des chaînes de caractères comme des adresses, dans lesquelles des éléments entiers peuvent être transposés, il se peut que la fonction DICECOEFFICIENT( ) soit un meilleur choix. Par exemple, la même adresse avec la transposition de l'élément "Suite" est identifiée comme très similaire par la fonction DICECOEFFICIENT( ), mais très différente avec la fonction LEVDIST( ) :
Paire d'adresses |
Coefficient de Dice (n-gramme de 2 par défaut) |
Distance Levenshtein |
---|---|---|
|
0,9167 |
22 (plus la distance Levenshtein est grande, plus les deux chaînes sont différentes) |
Comparaison des valeurs sans transposition
Si la transposition ne présente pas de problème, il se peut que la fonction LEVDIST( ) donne des résultats plus utiles. Par exemple, le même nom d'entreprise avec une ponctuation différente est identifié comme très différent par la fonction DICECOEFFICIENT( ), mais très similaire avec la fonction LEVDIST( ) :
Paire de noms d'entreprise |
Coefficient de Dice (n-gramme de 2 par défaut) |
Distance Levenshtein |
---|---|---|
|
0,3750 |
3 |