50. pepsi-stage-detect-language¶
Détecter la ou les langues humaines d’un corps de message et les noter dans l’état.
50.1. Rôle¶
pepsi-stage-detect-language identifie la ou les langues naturelles utilisées dans un corps de message et les note sous state.language pour que des étapes ou des modèles ultérieurs s’en servent, puis avance le message vers NEXT_STAGE. Elle ne fait qu’annoter l’état — elle ne modifie jamais le message et ne l’abandonne, ne le fait rebondir ni ne le met en pause. Référence : pepsi-stage-detect-language(1).
50.2. Fonctionnalités¶
Extraction de texte MIME partagée : un analyseur MIME complet dans
pepsi-commonextrait du message le texte de corps en ligne — les partiestext/plainverbatim et les partiestext/htmlréduites en texte brut — chacune décodée depuis son encodage de transfert de contenu et son jeu de caractères vers UTF-8. Pour unmultipart/alternative, l’alternative en texte brut est préférée à celle en HTML — sauf si elle ne contient aucune prose, la forme que produit un expéditeur de masse lorsqu’il met deux URL nues là où devrait être le message, auquel cas la partie HTML sœur est utilisée.Filtrage de la prose : le texte extrait est réduit à ce qu’un humain a écrit en mots avant que quoi que ce soit ne soit classifié. Les jetons qui ne peuvent pas être des mots (URL, adresses, clés base64, identifiants, tout ce qui comporte un chiffre ou un point interne) sont écartés, puis les lignes ayant trop peu de lettres pour être une phrase. Ce n’est pas une question de propreté : sinon, un corps majoritairement fait de texte machine se classifie sur ce texte machine, et un vidage d’enregistrements DNS ou un corps de deux URL nues reçoit un verdict assuré pour une langue que personne n’y a écrite. Les règles sautent les tests de longueur, de chiffres et de majuscules pour les écritures qui ne séparent pas les mots par des espaces (han, kana, hangul, thaï, …), qui supprimeraient sinon un message chinois ou thaï dans son intégralité.
Saute ce qu’elle ne peut lire : les pièces jointes (y compris les pièces jointes texte) et les corps chiffrés ou opaques (
multipart/encrypted,application/pkcs7-mime, …) ne portent aucun texte lisible ; un tel message — ou un message dont le corps ne contient pas de prose, ou trop peu pour classifier — avance inchangé, sans ajout de clélanguage. Un corps qui n’est que des URL n’a pas de langue, et n’en noter aucune est la réponse honnête.Détection statistique : la prose restante est classifiée avec le détecteur lingua, construit à partir des langues candidates de l’option
LANGUAGES. Seuls les 20 000 premiers caractères de prose lui sont remis — une langue se décide sur les premiers kilo-octets — et les au plus trois langues les plus probables dont la probabilité est d’au moins 5 % sont conservées.Sortie Accept-Language : le résultat est stocké sous forme d’une chaîne de style HTTP
Accept-Language, par exempleen;q=1, de;q=0.45, où chaqueqest la probabilité de détection de cette langue.Construit une fois par worker, à pleine précision : le détecteur est coûteux à construire, aussi chaque processus worker le construit-il une seule fois (par ensemble de langues candidates) et le réutilise pour chaque message. Le mode basse précision de
linguan’est délibérément pas utilisé : il court-circuite sur un seul n-gramme propre à une seule candidate, de sorte qu’une adresse ou une clé peut décider du verdict pour tout un corps, et il précharge des modèles de comptage de n-grammes supplémentaires ; il n’apporte donc rien.
50.3. Configuration¶
[stage-<name>] : PROGRAM = pepsi-stage-detect-language, NEXT_STAGE (obligatoire) et LANGUAGES (facultatif ; codes ISO 639-1 séparés par des espaces ou des virgules, au moins deux distincts, par défaut un large ensemble courant — restreignez-le aux langues que vous attendez, car chaque langue activée coûte de la mémoire au worker). Le jeton unique * désigne toutes les langues que le détecteur prend en charge. Voir pepsi-stage-detect-language(1).
50.4. État¶
Entrées : aucune depuis
state; l’étape lit le corps du message stocké.Sorties : lorsqu’une langue est détectée, la chaîne de style
Accept-Languageest fusionnée dansstatesouslanguage; sinonstateest intact.
50.5. Voir aussi¶
pepsi-detect-language (l’outil hors ligne de diagnostic et d’ajustement : le même exécutable sous un second nom, qui indique ce que cette étape noterait pour un message lu depuis un fichier), pepsi-stage-check-whitelist, pepsi-stage-anti-spam, Fonctionnalités prises en charge, pepsi-stage-detect-language(1).