Aller au contenu

Comment calculer la similarité de 2 textes avec Google Sheets ?

Antoine Brisset
Antoine Brisset
Temps de lecture : 3 min
Comment calculer la similarité de 2 textes avec Google Sheets ?
Photo by Jørgen Håland / Unsplash

Table des matières

Aujourd'hui, on se plonge à nouveau dans Google Sheets avec un tuto rapide pour te montrer comment mesurer la similarité entre 2 contenus.

Choix de la métrique : l'indice de Jaccard

Il existe énormément de façons de mesurer un taux de similarité entre deux textes : distance de Levenshtein, indice de Dice, similarité cosinus, etc.

Ici, je vais utiliser l'indice de Jaccard, aussi appelé coefficient de Jaccard.

Essentiellement pour deux raisons :

L'indice de Jaccard se calcule de la façon suivante (A et B étant ici les 2 ensembles à comparer) :

J(A,B) = |A ∩ B| / |A ∪ B|

Autrement dit, c'est le rapport entre l'intersection de 2 ensembles et l'union de ces 2 ensembles.

Calculer l'intersection

1. Créer une liste avec chaque mot

Avant tout, il faut découper chaque texte en mots.

Je vais donc utiliser la formule que j'avais présentée il y a quelques semaines pour compter le nombre de mots dans une cellule Google Sheets, en enlevant simplement le COUNTA.

Ce qui donne :

=SPLIT(REGEXREPLACE(A2;"[!""#$%&()*+,./:;<=>?@[\]^_`{|}~]";"");" ")
SPLIT

Je vais ensuite afficher les valeurs les unes à la suite des autres avec TRANSPOSE.

TRANSPOSE

Je montre uniquement le process pour le texte 1, mais bien entendu c'est la même chose pour le texte 2.

2. Trouver les mots-clés en commun

Pour trouver les mots-clés en commun entre les 2 ensembles, je vais reprendre la formule que j'avais utilisée pour comparer deux colonnes dans Google Sheets.

Je vérifie donc si chaque mot figurant dans la plage de mots issue du découpage de Texte 1 est présent dans la plage de mots issue du découpage de Texte 2.

Si oui, je l'affiche.

Sinon, je n'affiche rien.

COUNTIF

Au passage, pas besoin de tout passer en minuscule, la comparaison via COUNTIF ne tient pas compte de la casse :)

3. Dédoublonner et filtrer

Il ne reste plus qu'à :

  • dédoublonner en ajoutant UNIQUE devant la formule
  • filtrer les cellules vides avec FILTER
UNIQUE + FILTER

Et voilà : la première étape est OK !

Calculer l'union

1. Concaténer les 2 textes

D'abord, je concatène les deux textes en prenant soin, comme pour l'étape précédente :

  • de supprimer la ponctuation (avec REGEXREPLACE)
  • de supprimer les espaces superflus (avec TRIM)
  • de supprimer les éventuels caractères indésirables (avec CLEAN)
0:00
/
TEXTJOIN

2. Transformer en liste de mots

Ensuite, j'utilise SPLIT pour convertir le texte en liste de mots.

SPLIT

3. Dédoublonner

Enfin, j'utilise UNIQUE pour dédoublonner.

La fonction UNIQUE ne fonctionne qu'avec des données verticales, je dois donc intercaler la fonction TRANSPOSE.

UNIQUE + TRANSPOSE

Compter et diviser

Il ne reste plus qu'à compter les valeurs dans chaque plage (l'intersection et l'union).

COUNTA

Puis faire la division.

Division

Formule finale

Et voilà la formule finale !

=COUNTA(FILTER(UNIQUE(ARRAYFORMULA(LOWER(IF(COUNTIF(TRANSPOSE(SPLIT(REGEXREPLACE(B2;"[!""#$%&()*+,./:;<=>?@[\]^_`{|}~]";"");" "));TRANSPOSE(SPLIT(REGEXREPLACE(A2;"[!""#$%&()*+,./:;<=>?@[\]^_`{|}~]";"");" ")))>0;TRANSPOSE(SPLIT(REGEXREPLACE(A2;"[!""#$%&()*+,./:;<=>?@[\]^_`{|}~]";"");" "));""))));UNIQUE(ARRAYFORMULA(LOWER(IF(COUNTIF(TRANSPOSE(SPLIT(REGEXREPLACE(B2;"[!""#$%&()*+,./:;<=>?@[\]^_`{|}~]";"");" "));TRANSPOSE(SPLIT(REGEXREPLACE(A2;"[!""#$%&()*+,./:;<=>?@[\]^_`{|}~]";"");" ")))>0;TRANSPOSE(SPLIT(REGEXREPLACE(A2;"[!""#$%&()*+,./:;<=>?@[\]^_`{|}~]";"");" "));""))))<>""))/COUNTA(UNIQUE(TRANSPOSE(SPLIT(TEXTJOIN(" ";TRUE;CLEAN(TRIM(REGEXREPLACE(A2;"[!""#$%&()*+,./:;<=>?@[\]^_`{|}~]";"")));CLEAN(TRIM(REGEXREPLACE(B2;"[!""#$%&()*+,./:;<=>?@[\]^_`{|}~]";""))));" "))))
Google Sheets

Antoine Brisset Twitter

Consultant SEO depuis 2010. Je traque les clics inutiles et automatise les tâches répétitives pour gagner du temps dans mon quotidien de travailleur du web.


Articles Similaires

Membres Public

Importer des datasets facilement grâce aux fonctions nommées de Google Sheets

Aujourd'hui, je vais te montrer comment importer facilement un jeu de données que tu utilises souvent à l'intérieur de tes feuilles Google Sheets. Exemple : tu travailles sur du SEO local et tu as besoin, régulièrement, de récupérer la liste des 36000 communes françaises. Pour éviter de devoir à chaque fois

Importer des datasets facilement grâce aux fonctions nommées de Google Sheets
Membres Public

Comment scraper proprement avec IMPORTXML ?

Quand on utilise IMPORTXML pour extraire le contenu de plusieurs balises (exemple : toutes les balises h2 d'une page), les différentes valeurs trouvées s'affichent par défaut les unes en dessous des autres, sur plusieurs lignes. C'est embêtant. Pourquoi ? Parce que si on ajoute d'autres URLs, on ne peut pas "tirer" la

Comment scraper proprement avec IMPORTXML ?
Membres Public

L'astérisque comme alternative à la fonction AND dans Google Sheets

Les formules Google Sheets, c'est bien, mais quand on commence à enchaîner les ouvertures de parenthèses pour imbriquer plusieurs fonctions, ça devient vite indigeste. Aujourd'hui, je vais te donner une astuce toute simple pour réduire le nombre de parenthèses dans tes IF. En général, pour tester si plusieurs conditions sont

L'astérisque comme alternative à la fonction AND dans Google Sheets