Code-Garage #103 - Les secrets cachés de la recherche d'emoji dans Slack
Durée: 11m10s
Date de sortie: 04/09/2024
Connaissez-vous le subsequence character matching ? C'est l'algorithme très simple qu'utilise Slack pour sa recherche d'émoji !
Notes de l'épisode :
Salut et bienvenue dans ce nouvel épisode du podcast de Code Garage. Aujourd'hui,
on se retrouve pour parler d'un sujet que je ne pensais pas forcément aborder dans un épisode
de podcast parce que c'est assez niche, mais en réalité, en creusant un peu, je me suis dit que
ça pouvait être vraiment intéressant de vous en parler et donc comme vous l'aurez sûrement
lu dans le titre, on va parler de la recherche d'Emoji sur Slack, mais on va vraiment rentrer
dans le côté technique de comment est-ce que ça fonctionne, quelles algorithmes ils ont utilisé
et pourquoi est-ce qu'ils ont fait ce choix. Donc si jamais vous utilisez Slack de manière
régulière, vous aurez peut-être remarqué que la fonction de recherche d'Emoji, elle est un peu
bizarre. Les résultats, en fait, ils sont souvent beaucoup plus larges que ce qu'on s'attendrait
avec notre recherche d'origine. Alors je vous prends un exemple très simple que vous pourrez
même essayer du coup chez vous. Si jamais vous recherchez un emoji et que vous tapez comme
requête math comme le début de mathématique, évidemment on s'attend à trouver éventuellement
des opérateurs mathématiques plus, moins, égal, etc. et peut-être éventuellement d'autres mots
qui pourraient contenir mathématiques, enfin d'autres images d'Emoji, pardon, qui pourraient
contenir mathématiques. Mais en fait, on se retrouve avec des résultats assez bizarres,
notamment une femme à barbe, on se retrouve avec un bonhomme de neige, on se retrouve avec
une mariée, enfin bref, beaucoup, beaucoup de choses qui ne sont pas forcément dans le thème
qu'on recherchait au début. Là, on est quasiment sur deux à trois fois plus de résultats que ce
qu'on s'attendrait. Alors on pourrait penser que c'est juste un bug, mais en réalité, c'est bel et
bien un choix d'implémentation qui a ses avantages et on va voir qu'il y a quand même pas mal d'avantages,
mais qui a aussi ses inconvénients. Alors, comment est-ce que cette recherche est implémentée ?
D'abord, il faut savoir que la recherche des emojis est basée sur l'identifiant textuel des
emojis. Donc chaque emoji dans Slack, mais d'ailleurs partout où vous en retrouverez, sur
Android, sur Windows, peu importe, eh bien, ils possèdent tous une version texte souvent,
alors ça va dépendre de l'implémentation, mais encadré par deux points. Donc par exemple,
pour un coeur classique, ça va être deux points et Height, le mammoot, ça va être deux points
et Mammoth, le chiffre 1, c'est deux points et One, et deux points derrière à chaque fois,
c'est encadré par deux points, etc. En général, c'est vraiment un mot ou un groupe de mots qui
représente au mieux l'emoji. Alors ça, ça peut dépendre, comme je disais, de l'implémentation.
Des fois, ce ne sont pas exactement les mêmes mots qui vont être utilisés selon l'application,
le système d'exploitation, peu importe. Mais par exemple, dans Slack, c'est cette
identifiant textuelle-là que vous verrez si vous copiez coller un message qui est présent
dans Slack et que vous le collez quelque part ailleurs, vous verrez apparaître le nom de l'emoji
qui est parfois même traduit. Si vous disais Slack en français, eh bien, vous aurez la plupart des
noms des emojis en français. Mais en réalité, ça, c'est vraiment pour poser la base parce que c'est
rentré dans ce qu'on appelle la recherche par sous-séquence ou le matching par sous-séquence.
En fait, chaque algorithme ou méthode de recherche, évidemment, a des inconvénients et des avantages
et les critères de sélection qu'on va utiliser pour effectuer notre recherche,
eh bien, ça va dépendre de l'expérience utilisateur et éventuellement des contraintes
techniques qu'on va avoir sur le projet. En général, on va choisir, alors je ne parle pas
forcément d'algorithmes en soi parce que ce n'est pas toujours un algorithme, on va dire,
dans l'implémentation, mais en tout cas de la méthode. Et on va choisir cette méthode en fonction
souvent de la tolérance au faux positif. Les faux positifs, ce sont ce qui apparaît comme
positif, mais qui ne devrait pas l'être. La tolérance au faux négatif, ce qui n'apparaît pas dans
les positifs alors que ça devrait l'être. Et du nombre de résultats que ça va retourner
dans son ensemble. Alors, je l'ai déjà dit, sur Slack, ils ont opté par une détection,
par sous-séquence, mais une sous-séquence de caractère. En fait, le fonctionnement,
il est vraiment super simple. Par exemple, si vous recherchez le mot flash, pour rechercher un flash
d'appareil photo par exemple, eh bien, en réalité, Slack, il va rechercher tous les emoji
qui contiennent dans le bon ordre les lettres F, L, A, S et H. Donc, ça va être le cas pour,
par exemple, comme je l'ai dit, Flashlight. Flashlight, c'est une lampe torche en anglais.
Donc, il va évidemment retourner ça pour, il y a un emoji avec un appareil photo et qu'un flash
qui s'appelle Camera with Flash. Évidemment, ça sera retourné dedans. Mais ça va aussi retourner
un emoji de ballerine. Alors, de ballerine là, je suis sûr. Parce qu'en anglais, le nom s'appelle
Flat Shoe et que dans Flat Shoe, on retrouve bien dans l'ordre notre F, notre L, le A, le S et le H.
Ils sont séparés par un tiré, puisqu'il y a deux mots et ils sont séparés même par d'autres lettres,
mais il les retournait quand même. Et on a même encore un peu plus bizarre, on a le flag, le,
le flag Saint Helena et donc là, on a aussi FLA, S pour le Saint et Helena qui commencent par un H.
En fait, cette méthode, elle a pour caractéristique de retourner un grand nombre de faux positifs,
comme on a pu le voir, mais de réduire le nombre de faux négatifs à quasi zéro et surtout,
en fait, d'être très tolérant aux oublies de lettres, quand on rajoute des espaces ou qu'on oublie
un espace, etc., c'est très tolérant à ce genre de faute. Alors la conséquence de cet algorithme,
c'est qu'il permet de retourner, enfin, il retourne un très grand nombre d'éléments et c'est pour ça
que pour le cas de Slack et de la recherche d'Emoj, c'est une très bonne méthode tout simplement,
parce qu'effectivement, ça va retourner un trop grand nombre d'éléments et surtout,
donc on a dit de faux positifs, mais c'est pas grave puisque dans son widget d'affichage des
emoji, Slack, il peut afficher jusqu'à 72 emoji et qu'en plus, pour l'œil humain et
l'utilisateur lambda, reconnaître un emoji parmi ce qu'on cherche, c'est très simple puisqu'on
s'attend, on a une image mentale de ce qu'on s'attend à voir et donc ça va être très facile de cliquer
sur le bon emoji. C'est plus facile que de visualiser de la différence entre du texte
ou des choses comme ça. Et donc, c'est un bon choix en termes d'expérience utilisateur et en
plus, c'est très facile à implementer en local. Il n'y a pas besoin d'avoir une recherche ultra
spécifique, en général, la liste des emoji est stockée en local. Donc tout peut se faire même
sans internet, etc. C'est une économie des requêtes serveurs pour aller chercher, je ne sais quel
élastique sur tout quoi. Là, on a une recherche très simple et très efficace. Alors évidemment,
ça ne sera jamais, on n'a d'ailleurs jamais une méthode, un algorithme de recherche qui est parfait,
peu importe la technique. Celle-là, elle n'est pas tolérante à certaines fautes d'orthographe ou
de frappe. Ça arrive, si jamais on remplace complètement une lettre du mot qu'on cherche,
eh bien ça peut ne pas marcher. Contrairement à d'autres algorithmes comme la distance de l'Ewenstein
dont j'avais parlé dans un précédent épisode, qui là va pouvoir faire du remplacement de lettre,
mais qui va être déjà un peu plus compliqué à calculer, enfin un peu plus demandant en
ressources, même si ce n'est pas énorme non plus. Et pour finir, en fait l'un des avantages de cette
méthode, c'est qu'on peut l'implémenter directement avec une petite expression régulière. Et donc ça,
ça se fait super facilement. Si on reprend notre exemple de flash, du mot flash, eh bien l'expression
régulière pour effectuer une recherche de sous séquence de caractère pour cette requête,
eh bien en fait, ça sera simplement d'avoir, alors évidemment on va encadrer à chaque
fois pour les deux points, comme je vous ai dit tout à l'heure puisque le nom des emojis est encadré
par des deux points. Mais en fait à chaque fois, on va simplement découper les lettres qu'on a dans
notre mot et intercaler, intercaler la recherche de tout caractère. Donc ce qui nous donne,
tout caractère en régex, c'est point étoile, un tout caractère n fois, eh bien là ça va être
ça, en fait on va avoir point étoile F, point étoile L, point étoile A, point étoile S,
point étoile H, point étoile. Et donc ça, ça va nous permettre de récupérer tous les mots
qui contiennent les bonnes lettres dans le bon ordre, même s'il y a des lettres intercalées,
etc. Je l'ai testé, je vous mets en lien l'article de blog dont est inspiré cet épisode que j'ai
écrit et vous retrouverez directement même une implementation pour faire cette recherche,
enfin pour générer cette expression régulière à la volée pour faire cette recherche changeable
à la script. Voilà si ça vous intéresse, c'est hyper facilement implémentable. Voilà, j'espère
que cet épisode vous aura plu, moi j'ai vraiment aimé faire cette recherche et surtout ce que j'aime
bien dans ce genre d'histoire là, c'est qu'en fait on voit que même des entreprises qui sont
valorisées à des milliards de dollars et qui ont des centaines et des centaines voire des milliers
d'ingénieurs pour travailler sur leurs produits, et bien ils continuent à utiliser des petits
algorithmes qui sont pas parfaits mais qui répondent à une problématique, à une solution et qui ont
suffisamment d'avantage par rapport à leurs inconvénients et aux contraintes du projet pour
être sélectionnés. Je trouve que c'est toujours intéressant notamment pour implémenter dans nos
projets après même s'ils sont un peu plus modestes. Moi sur ce je vous dis à la semaine prochaine,
pas un prochain épisode du podcast, mais avant de vous laisser je vous donne une annonce parce
qu'on vient d'annoncer tout ça pour la rentrée 2024-2025. C'est un plan spécial pour les écoles
donc maintenant une école peut simplement prendre des licences pour tous ces étudiants et évidemment
c'est un prix très attractif par rapport au prix public parce qu'on a envie que le maximum d'école
puisse donner le maximum de chance à leurs étudiants de pouvoir progresser et d'avoir même un
meilleur taux de retour à l'emploi ou tout simplement d'accès à l'emploi. Donc n'hésitez pas à aller
sur Code Garage et vous verrez qu'il y a des fonctionnalités spéciales, un panneau pour gérer
ces étudiants, leurs progressions, avoir des conseils etc. Donc si jamais vous êtes étudiant
aux étudiants, n'hésitez pas à en parler dans votre école pour simplement pouvoir accès vous
gratuitement à Code Garage si l'école souscrit un plan justement pour vous et sinon si vous êtes
directement je sais pas directeur, directrice d'une école responsable de formation tout importe,
n'hésitez pas à aller faire un tour aussi et si jamais vous avez des questions ou quoi que ce soit
eh bien vous pouvez nous contacter aussi et on répondra à toutes les questions sachant qu'il y a
évidemment une promo jusqu'à fin septembre pour bien préparer justement cette rentrée avec les
écoles donc faut vraiment en profiter maintenant. A la semaine prochaine pour un prochain épisode
du podcast salut !
Episode suivant:
Les infos glanées
Code-Garage
Découvrons ensemble des sujets passionnants autour du métier de dev et de la programmation en général !
Tags