tokenize(mb_strtolower($message)); (new TextNormalizer())->transform($tokens); // J'ai ajouté quelques stop words pertinents pour vos alertes // $tokens = (new StopWordsFilter([ // 'le', // 'la', // 'de', // 'du', // 'les', // 'des', // 'un', // 'une', // 'et', // 'ou', // 'mais', // 'donc', // 'or', // 'ni', // 'car', // 'je', // 'tu', // 'il', // 'elle', // 'nous', // 'vous', // 'ils', // 'elles', // 'ce', // 'cet', // 'cette', // 'pour', // 'sur', // 'dans' // ]))->transform($tokens); // var_dump($tokens); // die; // 2. Reconversion en chaîne de caractères (String) // Rubix ML a besoin d'une phrase, pas d'un tableau de mots. $cleanedMessage = implode(' ', $tokens); // Exemple de résultat : "bonjour exercice alerte inondation commune veuillez evacuer" // 3. Prédiction // $classifier = new MessageQualifier(); $classifier = new MessageQualifierShort(); try { $message = "Attention attentat dans la zone industrielle !"; // 1. Priorité absolue : Mots-clés critiques (Hard-coded) // $motsCritiques = ['attentat', 'fusillade', 'évacuer']; // foreach ($motsCritiques as $mot) { // if (mb_stripos($message, $mot) !== false) { // die("ALERTE CRITIQUE DÉTECTÉE (Mot-clé)"); // } // } // 2. Si aucun mot critique, on demande au ML de nuancer $result = $classifier->predict($message); if ($result['label'] === 'ALERTE' && $result['confidence'] > 0.7) { echo "Alerte probable confirmed par ML."; } else { echo "Simple information."; } // $prediction = $classifier->predict($cleanedMessage); // // 4. Logique métier // if ($prediction['label'] === 'ALERTE') { // echo "CECI EST UNE ALERTE ! Envoi sur canal prioritaire (SMS/Sirène)."; // } else { // echo "Ceci est une information. Envoi sur canal secondaire (Email/App/Panneau)."; // } } catch (\Exception $e) { // Si le fichier model.rbx n'existe pas echo "Erreur : Le modèle n'a pas été entraîné. Lancez train.php d'abord."; }