simogeo j'ai jamais tué de chats, ... | 
   .. j'ai du mal a me representer 1 million de caractères là ... donc je ne saurais pas répondre
   2 solutions sont envisageables et je te recommande de faire des benchs pour savoir laquelle est la meilleure ..   - soit tu te tapes une grosses regex de mort  et tu recupères tes mots. ( les regex c'est gourmand   )
 - soit tu fais un simple explode sur les espaces et tu effecues un array_walk() avec str_replace() pour virer les carcatères à la con collé s en fin et début de mot : .,()  ... etc
   je privilegie la deuxième option         |