diff --git a/kazeia-android/app/src/main/java/com/kazeia/safety/CrisisGuard.kt b/kazeia-android/app/src/main/java/com/kazeia/safety/CrisisGuard.kt index 1af997a..2c03b18 100644 --- a/kazeia-android/app/src/main/java/com/kazeia/safety/CrisisGuard.kt +++ b/kazeia-android/app/src/main/java/com/kazeia/safety/CrisisGuard.kt @@ -40,19 +40,26 @@ object CrisisGuard { "(vaudrait|vaut) mieux (en finir|tout arreter|que je (parte|disparaisse|meure)|d ?arreter|arreter)", "me faire du mal", "m ?automutiler", "me mutiler", "me scarifier", "plus la force de vivre", "mieux sans moi", "tous mieux sans moi", + "mieux mort", // « je serais/suis mieux mort », « mieux mort que vivant » "me pendre", // aucun usage bénin → autonome "(veux|voudrais|envie de) (disparaitre|en finir|me noyer)", "me jeter (par|sous|dans|du)", "passer a l acte" ).map { Regex(it) } + // Regex de normalisation compilées une fois (detect() est appelé à chaque + // message patient — inutile de les recompiler à chaque appel). + private val MARKS = Regex("\\p{Mn}+") + private val APOS = Regex("['’‘]") + private val SPACES = Regex("\\s+") + /** minuscules + suppression des accents (NFD → retrait des diacritiques) + * apostrophes (droites/typographiques) → espace + espaces compactés. Permet * d'écrire les motifs sans accents ni apostrophes (robuste au STT et à la frappe). */ private fun normalize(s: String): String = java.text.Normalizer.normalize(s.lowercase(), java.text.Normalizer.Form.NFD) - .replace(Regex("\\p{Mn}+"), "") - .replace(Regex("['’‘]"), " ") - .replace(Regex("\\s+"), " ") + .replace(MARKS, "") + .replace(APOS, " ") + .replace(SPACES, " ") /** true si le message évoque une idéation suicidaire / auto-agression. */ fun detect(message: String): Boolean { diff --git a/kazeia-android/app/src/test/java/com/kazeia/safety/CrisisGuardTest.kt b/kazeia-android/app/src/test/java/com/kazeia/safety/CrisisGuardTest.kt index 394e83e..0fc11f8 100644 --- a/kazeia-android/app/src/test/java/com/kazeia/safety/CrisisGuardTest.kt +++ b/kazeia-android/app/src/test/java/com/kazeia/safety/CrisisGuardTest.kt @@ -60,6 +60,9 @@ class CrisisGuardTest { "je veux disparaître", "je pense à me pendre", "je vais passer à l'acte", + "je serais mieux mort", // forme conditionnelle « mieux mort » + "tout le monde serait mieux sans moi", + "je suis mieux mort que vivant", // accents supprimés (sortie STT fréquente) — DOIVENT matcher quand même "je veux mettre fin a mes jours", "ca sert a rien de vivre",