cii-text-analysis/save/modernClassifier.php.save
Jéremy Munsch f68d2ac333
premier poc
2026-02-11 08:24:04 +01:00

152 lines
5 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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.";
}