arnuche a écrit :
Chapeau pour ton boulot, tu as dû apporter pas mal de modifications au code original.
En gros ça fonctionne comment : en voyant si un certain nombre de mots sont communs à 2 phrases ?
Si oui quel nombre ? Parce que je n'en vois pas dans ton code.
|
Version courte à tes questions : Oui, en voyant si un certain nombre de mots sont en commun. Pas de nombre dans l'algo, j'ai filtré ensuite dans Excel.
Version longue :
Pour chaque ligne, la phrase est découpée en mots.
Puis pour chaque ligne, le coefficient de Jaccard (que je rappelle j'ai découvert dans le cadre de mon besoin ; et donc que je ne maîtrise pas du tout) est calculé : (A,B) = (A ∩ B) / (A ∪ B)
En gros, c'est le rapport de l'intersection sur l'union de 2 ensembles :
Mon premier ensemble (A) (de mots) est la phrase que je compare, et l'autre ensemble (B) (de mots) est (tour à tour) toutes les autres phrases. Donc pour chaque mot de ma phrase à comparer (A), l'algo compte le nombre de mots en commun (entre phrase A et phrase B) (l'intersection), et le divise par le nombre de mots total (nombre de mots "différents" de A + B). Ca donne un nombre qui est 0 si tous les mots sont différents et 1 si tous les mots sont identiques.
Et comme pour une phrase donnée (A), ce coefficient est calculé entre cette phrase et toutes les autres phrases, on peut identifier la phrase (B) qui a le coefficient le plus élevé, et le faire afficher à côté de la phrase A, avec le numéro de ligne de sa plus proche jumelle.
"Je suis un homme" et "Je suis une femme"
Ca va donner :
(2 mots en commun) / (6 mots différents en tout) = 0,33
"Je suis un homme" et "Je suis un garçon"
(3 mots en commun) / (5 mots différents en tout) = 0,40
On voit bien que dans le 2e exemple, les phrases sont plus proches ; et le coeff est plus proche de 1.
Quand j'ai mis la formule dans mon fichier Excel, j'ai ensuite mis un filtre sur toutes les lignes dont le coefficient était supérieur à 0,8 et ça m'a fait apparaitre toutes les phrases similaires.
Message édité par jultey le 13-11-2023 à 18:55:25