cii-text-analysis/save/modernClassifier.php.save

153 lines
5 KiB
Text
Raw Permalink Normal View History

2026-02-10 16:19:59 +01:00
<?php
declare(strict_types=1);
use Classifier\Lib\MessageQualifier;
use Classifier\Lib\MessageQualifierShort;
use Classifier\Lib\TextNormalizer;
use TextAnalysis\Tokenizers\GeneralTokenizer;
use TextAnalysis\Filters\StopWordsFilter;
require_once __DIR__ . '/vendor/autoload.php';
// require_once __DIR__ . '/Lib/MessageQualifier.php';
require_once __DIR__ . '/Lib/MessageQualifierShort.php';
require_once __DIR__ . '/Lib/TextNormalizer.php';
// Le message à tester
// $message = "Bonjour, incendie signalé dans la commune, veuillez évacuer immédiatement !";
// $message = "Bonjour, le montant de votre allocation logement a changé. Merci de vous rapprocher de la CAF et de procéder au paiement du montant du dès que possible.";
// $message = "
// Objet : Nouveauté - votre avis d’échéance bientôt en ligne
// Cher client,
// À compter de septembre, fini le papier ! Votre avis d’échéance ne sera plus envoyé par courrier, mais sera désormais disponible chaque mois dans la rubrique Mes documents de votre espace client.
// Une solution plus rapide, plus pratique et plus respectueuse de l’environnement !
// Pour profiter pleinement de ce nouveau service, pensez à :
// Mettre à jour votre adresse e-mail et votre numéro de téléphone dans votre profil
// Activer les notifications de l’application pour rester informé en temps réel
// Ce changement vous permet de gagner en autonomie, de réduire les délais de réception et de contribuer à une démarche durable.
// Merci de votre confiance !
// L’équipe SIDR
// ";
// NOK
// $message = "Bonjour, une inondation a été signalée dans la commune, veuillez évacuer immédiatement !";
// $message = "
// Ici la société BUTAGAZ, située route du bois rochers, à Le Douhet.
// ATTENTION, CECI N'EST PAS UN EXERCICE, ATTENTION, CECI N'EST PAS UN EXERCICE, ATTENTION, CECI N'EST PAS UN EXERCICE.
// Nous avons déclenché le P O I, suite à un incident survenu sur le site à XX h XX.
// Le sinistre est situé au niveau ZONE.
// Le produit impliqué est PRODUIT.
// Nous avons mis en oeuvre les moyens nécessaires pour limiter les effets.
// Nous déplorons NOMBRE victimes, mais cette information pourrait évoluer.
// A ce stade, la demande de mise en oeuvre du P P I , n’est pas à exclure.
// Pour nous contacter, le numéro de téléphone à utiliser est le : 05.46.97.78.99, le : 05.46.97.78.99.
// Il n'est pas nécessaire de nous rappeler afin de confirmer la bonne réception de ce message.
// La ligne téléphonique doit rester disponible pour la gestion de l'événement.
// Tapez simplement 1, lorsque cela vous sera demandé.
// ATTENTION, CECI N'EST PAS UN EXERCICE, ATTENTION, CECI N'EST PAS UN EXERCICE, ATTENTION, CECI N'EST PAS UN EXERCICE.
// ";
$message = "Attention attentat, un attentat a été signalé dans la commune, merci de rester chez vous et d'éviter les déplacements !";
// 1. Nettoyage (Votre code existant)
$tokens = (new GeneralTokenizer())->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.";
}