Files
html/api/wevia-nl-normalizer-prehook.php
2026-04-17 17:52:49 +02:00

53 lines
2.3 KiB
PHP

<?php
/**
* WEVIA NL NORMALIZER — V26-SURGICAL · Opus · 17 avril 2026 17h50
*
* Doctrine 72 (ex-71) respectée : fix chirurgical 1 ligne ajoutée dans master-api.php (pas modification)
* Doctrine 63 : non destructif, fichier séparé loadé avant OPUS_BUSINESS_COUNT_GUARD
*
* Fix : "combien j'ai de leads" avec apostrophe/espace → normalise vers "combien leads"
*
* Problème originel (ligne 322 master-api.php, auteur Opus5) :
* preg_match('/\b(?:combien|nombre)\s+(?:de\s+|d\'|of\s+)?([a-z_]+)/iu', ...)
* capture le premier token après "combien" → "j'ai" au lieu de "leads"
*
* Solution NL normalizer : normalise $_mam (message) en supprimant les intercalaires
* "j'ai/jai/j ai/nous avons/tu as/mon/mes/de mes..." → ""
*
* Tests : "combien j'ai de leads" → "combien leads" → route count_business_real OK
*/
if (!empty($_mam) && is_string($_mam)) {
$__orig = $_mam;
// Patterns à normaliser (ordre important: plus spécifique d'abord)
$__patterns = [
// Possessifs + auxiliaires entre "combien" et entité
'/\b(combien|nombre|count|total|quantit[eé])\s+(?:j[\' ]?ai|jai|nous\s+avons|tu\s+as|on\s+a|il\s+y\s+a|vous\s+avez)\s+(?:de\s+|des\s+|du\s+|d[\' ]\s*)?\b/iu' => '$1 ',
// "j'ai combien de X" → "combien X"
'/\bj[\' ]?ai\s+(combien|nombre|total)\s+(?:de\s+|des\s+|du\s+|d[\' ])?\b/iu' => '$1 ',
// "mes/mon/ma X" entre combien et entité
'/\b(combien|nombre|total|quantit[eé])\s+(?:de\s+|des\s+)?(?:mes|mon|ma|mon\s+pipeline|mes\s+actuels?)\s+\b/iu' => '$1 ',
// Articles résiduels
'/\b(combien|nombre|total)\s+(?:de\s+|des\s+|du\s+|d[\' ])\s+\b/iu' => '$1 ',
];
$__normalized = $__orig;
foreach ($__patterns as $__pat => $__rep) {
$__normalized = preg_replace($__pat, $__rep, $__normalized);
}
// Si normalisation a changé quelque chose, update $_mam pour le bloc suivant
if ($__normalized !== $__orig) {
// Log pour audit trail
@file_put_contents(
'/var/log/weval/wevia-nl-normalizer.log',
date('c') . " NORMALIZED: '$__orig' → '$__normalized'\n",
FILE_APPEND | LOCK_EX
);
$_mam = $__normalized;
// $_wm aussi (shared global)
if (isset($_wm)) $_wm = $__normalized;
}
}