Related Differential Report
Description
Ce script pourvoit l'eggdrop du package Related_Differential_Report 1.21
Le rapport de relation différentielle est une extrapolation du principe de la
Distance de Levenshtein.
Rappelons que la distance de Levenshtein calcule le nombre de caractères qu'il est nécessaire d'ajouter, modifier, déplacer ou supprimer pour passer d'une chaîne de caractères à une autre.
Le rapport de relation différentielle (RDR) fait à peu près la même chose, à ceci près que la position des caractères n'a aucune importance pour lui.
Il calcule le taux de différences entre deux chaînes de caractères en se focalisant sur le nombre de caractères de chaque type.
De plus, les caractères conservant la même position entre les deux chaînes de caractères (en partant du début ou de la fin) ajoutent un bonus de similarité qui sera pris en compte dans le résultat final.
Enfin, une pénalité est appliquée si la longueur des deux chaînes de caractères présente une trop grande différence.
La valeur retournée est comprise entre 0 et 100, 0 signifiant qu'il n'y a aucune différence entre les deux chaînes de caractères, et 100 signifiant qu'elles sont très dissemblables.
Intérêt
Permet à un correcteur orthographique de faire des suggestions pour tel mot mal orthographié, en proposant d'autres mots dont le RDR par rapport au premier est faible.
Permet à une pseudo-IA de type chatterbot d'avoir une tolérance orthographique : si tel mot comparé à tel autre a un RDR inférieur à une tolérance donnée, on peut décider qu'il est équivalent.
Comparé à la méthode de la Distance de Levenshtein, RDR est plus souple en ce sens qu'il permettra par exemple de détecter deux phrases formulées différemment comme étant la même phrase puisque l'ordre des mots importe peu.
Syntaxe
::RDR::RDR
[-allchars
] <1ère chaîne de caractères
> <2ème chaîne de caractères
>
Si l'option
-allchars est spécifiée, tous les caractères seront pris en compte. Si elle ne l'est pas, seuls les caractères alphanumériques et les espaces seront traités.
Dans le but d'accroître la rapidité d'exécution, la validité de la syntaxe de la commande n'est pas vérifiée. Veillez donc à la respecter scrupuleusement, sans quoi le script ne fonctionnera pas comme prévu et vous n'en serez pas explicitement averti.
Exemples
::RDR::RDR "il fait beau aujourd'hui" "aujourd'hui il fait beau"
0.0
::RDR::RDR "il fera beau aujourd'hui" "aujourd'hui il fait beau"
8.637461117131487
::RDR::RDR "il fera beau aujourd'hui" "aujourd'hui il va pleuvoir"
20.935906263026013
::RDR::RDR "il fera beau aujourd'hui" "cette phrase n'a vraiment rien à voir"
55.65136373698695
Notez que dans l'exemple ci-dessus, le score reste éloigné de 100.
C'est dû au fait que les deux chaînes de caractères comportent un certain nombre de caractères communs.
::RDR::RDR "abcdefghi" "jklmnopqrstuvwxyz"
100.0
Changelog
v1.0
v1.1
- Modification de l'algorithme afin de valoriser les caractères qui conservent la même position entre les deux chaînes, en partant du début ou de la fin.
v1.2
- Correction : si les deux chaînes de caractères comparés étaient de longueur différente, le taux de différences retourné différait selon qu'on comparait string1 à string2 ou string2 à string1.
- Modification de la fonction servant à calculer le taux de différences afin d'affiner la pertinence des résultats.
- Ajout : une pénalité est appliquée au score final les deux chaînes de caractères comparées sont de longueur différentes.
- Ajout : une aide à la syntaxe est donnée dans l'erreur retournée par la commande ::RDR::RDR si elle est utilisée sans arguments.
- Le code a été commenté afin d'en faciliter la compréhension.
- Quelques optimisations.
v1.21
- Correction : comparer deux chaînes de caractères vides provoquait une erreur.
Téléchargement
Related Differential Report v1.21
Laissez vos commentaires / questions / suggestions / rapports de bugs
ici.