Bonjour, aujourd'hui je vous partage ma dernière création en Skript : un algorithme Soundex
Merci de laisser le commentaire avec mon nom avant la fonction si vous l'utiliser dans votre code. Vous pouvez aussi me citer sur le post si vous êtes quelqu'un de gentil
Il est très important d'avoir SkUtilities et skQuery pour que la fonction marche !
Qu'est ce que l'algorithme Soundex ?
L'algorithme Soundex est un algorithme phonétique d'indexation de noms par prononciations (merci Wikipedia). En gros, il va transformer les mots en chiffres selon certains critères, et permettra ainsi de reconnaitre deux mots proches, deux mots qui ont une correspondance entre eux malgré des différences dans l'écriture. Il est utilisé par beaucoup de sites, du moins est repris par beaucoup de sites (moteurs de recherches, etc.). Je prefère vous le partager plutôt que le voir copier coller depuis mes futurs skripts qui l'utiliseront.
L'algorithme
L'algorithme Soundex est plutôt simple à comprendre. Je vais le décrire grossièrement, si vous voulez le voir en détail, rendez-vous
ici. (le wikipedia anglais indique les exceptions et les règles, alors que la page française non)
On retire les espaces, les voyelles (dont celles anglaises), et les lettres doublées puis on met le mot en majuscule
On garde la première lettre
On attribue un numéro à chaque lettre que l'on a encore sauf la première
On garde seulement 3 chiffres, ou bien on ajoute des 0 pour avoir 3 chiffres
On met la première lettre suivi des trois chiffres, voilà.
Prenons par exemple le mot "Comment"
COMMENT
CMMNT
CMNT
M = 5, N = 5, T = 3
C553
La personne écrit mal le mot, et écrit "Cament"
CAMENT
CMNT
M = 5, N = 5, T = 3
C553
Même code, donc mot proche
Exceptions
Il y a néanmoins quelques exceptions. L'algorithme les respecte parfaitement !
Si 3 chiffres sont les même de suite dans le code final, on en garde qu'un seul. C'est à dire que si 3 lettres avec le même chiffre se suivent, on en garde qu'une. Par exemple, "Jackson" ne donne pas pas "A222" mais "A250"
Si deux lettres avec le même chiffre sont séparés d'un H ou d'un W, il n'y a qu'un chiffre et pas deux. Par exemple, "Ashcraft" n'est pas "A226" mais "A261"
Le code, la fonction, l'algorithme
donc pour l'utiliser, il suffit de faire soundex("text") et cela retournera un code. Par exemple "set {var} to soundex("salut")"
Le code expliqué
Utilisation théorique
Vous allez sûrement vous dire "ok mais je fais quoi de cette fonction".
Exemple théorique
Il suffit de comparer ce que retourne la fonction pour un terme, et pour l'autre. On peut comparer 'soundex("salut")' et 'soundex("solut")', on aura le même code.
Exemple
command /money <text>:[/size][/size]
[size=5][size=4] trigger:
if arg 1 is not "remove":
if soundex("remove") is soundex(arg 1):
send "The command is /money remove and not /remove %arg 1% :)"
Corrige la commande /money remove
Il y a des tonnes de choses à faire avec cela ! Des corrections, des anti-spam développés, pleins de trucs ! A vous de voir maintenant...
Si vous avez besoin d'aide n'hésitez pas à me demander, et n'hésitez pas non plus à lâcher un petit j'aime et un commentaire si vous aimez l'algorithme.
Polymeth.