{"ScriptPreparationCode":"testString = \u0060\r\nPour analyser le sujet, il faut penser \u00E0 analyser :\r\n- les 2 notions importantes du sujet\r\n- mais aussi les autres termes du sujet (attention chaque terme est important)\r\n\r\nIl y a plusieurs strat\u00E9gies possibles d\u0027analyse :\r\n- On peut d\u0027abord simplement noter ce \u00E0 quoi \u00E7a nous fait penser : on note des synonymes, des expressions, des situations et des id\u00E9es associ\u00E9es \u00E0 cette notion. On part de ses repr\u00E9sentations spontan\u00E9es (ce qui nous vient imm\u00E9diatement \u00E0 l\u0027esprit).\r\n- On pense aussi au contraire de la notion, aux oppos\u00E9s, \u00E0 des distinctions, des diff\u00E9rences\r\n- On essaie de trouver des exemples d\u0027application de la notion (\u00E0 quoi \u00E7a renvoie concr\u00E8tement ?)\r\n- On essaie de trouver des connaissances utiles sur cette notion (qu\u0027est-ce qu\u0027on a vu dans le cours \u00E0 ce propos ? Y a-t-il des philosophes, des courants philosophiques, du vocabulaire technique qu\u0027on pourrait mobiliser ?)\r\n- On essaie de d\u00E9finir la notion en d\u00E9gageant ses caract\u00E9ristiques fondamentales et sp\u00E9cifiques (qui la distinguent d\u0027autres notions)\r\n\r\nDans tous les cas, il faut travailler au brouillon \u00E0 l\u0027\u00E9crit, avec son stylo, et pas seulement dans sa t\u00EAte, en notant bien toutes ses id\u00E9es (m\u00EAme si on a l\u0027impression que c\u0027est nul : cela va au contraire nous permettre de d\u00E9bloquer notre pens\u00E9e !).\r\n\u0060","TestCases":[{"Name":"tokenize","Code":"tokenize(testString)\r\nfunction tokenize(text) {\r\n\t\t// Fonction pour diviser une cha\u00EEne de caract\u00E8res en tokens\r\n\t\tconst words = text.toLowerCase().split(/\\s|\u0027|,|\\.|\\:|\\?|\\!|\\(|\\)|\\[|\\]/).filter(word =\u003E word.length \u003E= 5) || []; // On garde d\u0027abord seulement les mots d\u0027au moins 5 caract\u00E8res\r\n\t\tconst tokens = [];\r\n\r\n\t\t// On va cr\u00E9er des tokens avec \u00E0 chaque fois un poids associ\u00E9s\r\n\t\tfor (const word of words) {\r\n\t\t\t// Premier type de token : le mot en entier ; poids le plus important\r\n\t\t\ttokens.push({word, weight: 5});\r\n\r\n\t\t\t// Ensuite on int\u00E8gre des tokens de 5, 6 et 7 caract\u00E8res cons\u00E9cutifs pour d\u00E9tecter des racines communes\r\n\t\t\t// Plus le token est long, plus le poids du token est important\r\n\t\t\t// Si le token correspond au d\u00E9but du mot, le poids est plus important\r\n\t\t\tif (word.length \u003E= 5) {\r\n\t\t\t\tfor (let i = 0; i \u003C= word.length - 5; i\u002B\u002B) {\r\n\t\t\t\t\tconst weight = i === 0 ? 0.6 : 0.4;\r\n\t\t\t\t\tconst token = word.substring(i, i \u002B 5)\r\n\t\t\t\t\ttokens.push({token,weight: weight});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (word.length \u003E= 6) {\r\n\t\t\t\tfor (let i = 0; i \u003C= word.length - 6; i\u002B\u002B) {\r\n\t\t\t\t\tconst weight = i === 0 ? 0.8 : 0.6;\r\n\t\t\t\t\tconst token = word.substring(i, i \u002B 6)\r\n\t\t\t\t\ttokens.push({token,weight: weight});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (word.length \u003E= 7) {\r\n\t\t\t\tfor (let i = 0; i \u003C= word.length - 7; i\u002B\u002B) {\r\n\t\t\t\t\tconst weight = i === 0 ? 1 : 0.8;\r\n\t\t\t\t\tconst token = word.substring(i, i \u002B 7)\r\n\t\t\t\t\ttokens.push({token,weight: weight});\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn tokens;\r\n\t}\r\n\t","IsDeferred":false},{"Name":"tokenize 2","Code":"tokenize2(testString)\r\nfunction tokenize2(text) {\r\n\t\t// Fonction pour diviser une cha\u00EEne de caract\u00E8res en tokens\r\n\t\t\r\n\t\t// On garde d\u0027abord seulement les mots d\u0027au moins 5 caract\u00E8res\r\n\t\tconst words = text.toLowerCase().split(/\\s|\u0027|,|\\.|\\:|\\?|\\!|\\(|\\)|\\[|\\]/).filter(word =\u003E word.length \u003E= 5) || [];\r\n\t \r\n\t\t// On d\u00E9finit des poids variables selon la taille du token\r\n\t\tconst weights = [0.4, 0.6, 0.8];\r\n\t \r\n\t\t// On va cr\u00E9er des tokens avec \u00E0 chaque fois un poids associ\u00E9\r\n\t\tconst tokens = words.reduce((acc, word) =\u003E {\r\n\t\t // Premier type de token : le mot en entier ; poids le plus important\r\n\t\t acc.push({ word, weight: 5 });\r\n\t\t // Ensuite on int\u00E8gre des tokens de 5, 6 et 7 caract\u00E8res cons\u00E9cutifs pour d\u00E9tecter des racines communes\r\n\t\t // Plus le token est long, plus le poids du token est important\r\n\t\t // Si le token correspond au d\u00E9but du mot, le poids est plus important\r\n\t\t const windowSizeMin = 5\r\n\t\t for (let windowSize = windowSizeMin; windowSize \u003C= windowSizeMin\u002Bweights.length-1; windowSize\u002B\u002B) {\r\n\t\t\tfor (let i = 0; i \u003C= word.length - windowSize; i\u002B\u002B) {\r\n\t\t\t const weightStart = i === 0 ? 0.2 : 0;\r\n\t\t\t const weight = Math.round((weights[windowSize-windowSizeMin] \u002B weightStart)*10)/10;\r\n\t\t\t const token = word.substring(i, i \u002B windowSize);\r\n\t\t\t acc.push({ token, weight });\r\n\t\t\t}\r\n\t\t }\r\n\t\t return acc;\r\n\t\t}, []);\r\n\t\treturn tokens;\r\n\t }","IsDeferred":false}]}