Utilisateur:LAURA/1/Filtres additionnels

Aller à la navigation Aller à la recherche

Laura permet aux administrateurs de Vikidia de modifier eux-mêmes directement l’un de ses filtres, sans passer par le serveur et les fichiers PHP. Pour ce faire, il vous faut :

  • être administrateur ;
  • avoir une bonne raison ;
  • vaguement maîtriser la syntaxe des expressions rationnelles (dont je vais donner une mini-présentation) ;
  • respecter absolument la structure de la page.

Structure à respecter

Le filtre qui sera importé par LAURA s’appelle Additionnel et se situe entre les balises pre de cette page, à la section « Filtre additionnel ». Pour être compréhensible par la robote, sa syntaxe doit être la suivante :

$tabFiltreAdditionnel0 = array(
    'intitulé 1' => array('#expression rationnelle 1#i', modification du score),
    'intitulé 2' => array('#expression rationnelle 2#i', modification du score),
     ...
    'intitulé n' => array('#expression rationnelle n#i', modification du score));

$tabFiltreAdditionnel0 représente le titre véritable du filtre :

  • $ représente le début d’une variable en PHP ;
  • tab est une convention de titre thilpesque qui rappelle que la variable est de type array (tableau) ;
  • Filtre, bah… cette variable est donc un filtre Clin d'œil ;
  • Additionnel est le titre du filtre ;
  • 0 représente le niveau du filtre. Un filtre de niveau 0 sera toujours exécuté, au contraire de filtres de niveau 1 ou 2, qui ne seront exécutés que si ces niveaux sont activés dans les paramètres de LAURA.

Les « intitulés » sont les motifs de révocation utilisés par LAURA pour son journal et ses messages aux vandales.

En guise d’illustration, voici le filtre Typo0 :

$tabFiltreTypo0 = array(
    'suite de 7 capitales/chiffres' => array('#[A-Z0-9]{7,}#', -10),
    'mot de 26 lettres' => array('#\w{26,}#i', -10),
    'suite de 5 non-lettres' => array('#\W{5,}#', -8),
    'majuscule ou chiffre dAns un m0t' => array('#[a-z][A-Z0-9]#', -10));

Survol de la syntaxe des expressions rationnelles

Pour le moment, Vikidia ne possède pas d’article Expression rationnelle ; il va donc peut-être falloir que j’explique ce dont il s’agit.

Une expression rationnelle est une chaîne de caractère ; c’est la raison pour laquelle '#expression rationnelle#paramètres' est encadré par des apostrophes droites (ou des guillemets droits, au choix).

On utilise les expressions rationnelles pour reconnaître des groupes de caractères. Par exemple, l’expression rationnelle '# est #' va correspondre à la phrase « Cette phrase est courte » (parce qu’" est " se trouve dans la phrase), mais pas « Cette phrase semble courte » (parce qu’" est " ne s’y trouve pas).
Ainsi, un filtre avec l’expression rationnelle '# je #' détectera dans les articles certaines phrases à la première personne du singulier.

Je dis certaines, car l’expression précédente ne correspond pas, par exemple, aux phrases « je vais bien », « et JE vais bien » ou « et j’aime Vikidia ». Alors, faut-il écrire une expression rationnelle par forme de mot à repérer ? Bien sûr que non, et c’est ce qui fait la force des expressions rationnelles.

Paramètres

D’abord, il y a les paramètres. Rappelons la structure des expressions rationnelles : '#expression rationnelle#paramètres'. Ici, les symboles # servent de délimiteurs (presque n’importe quel symbole peut convenir, j’ai simplement l’habitude d’utiliser celui-là). Ils séparent justement l’expression proprement dite (celle qui va repérer les morceaux de phrases) de ses paramètres, sous forme de lettres.

Le paramètre le plus commun et, probablement, dont l’usage sera ici le plus fréquent est i. Il permet de rendre l’expression insensible à la casse, c’est-à-dire de ne pas prêter attention au fait que les caractères sont en capitales ou en minuscules. Avec notre exemple précédent, ce paramètre nous permet une détection accrue : '# je #i' va reconnaître les phrases « et JE vais bien », « et jE VAis biEn », « et Je vaiS bien », etc.

Attention aux caractères discrets !

Pourquoi l’expression '# je #i' ne reconnait-elle pas la phrase « je vais bien » ? Évidemment parce qu’elle comporte une espace avant je (entre # et j), alors que la phrase à repérer n’en a pas et commence directement par je. Nous pourrions enlever les espaces et écrire l’expression '#je#i', qui fonctionnerait alors avec « je vais bien » ; mais attention ! Elle repérerait aussi « le jeu est une activité sociale », qui n’est pas une phrase à la première personne : nous outrepasserions notre objectif !

C’est la principale erreur à éviter pour écrire un nouveau filtre. Il faut toujours prêter plus d’attention aux caractères habituellement plus discrets et en apparence moins importants.

Faire des variations

Pour repérer « et j’aime Vikidia », '# je #i' ne fonctionne pas. Nous pouvons écrire une nouvelle expression, '# j'#i', mais il y a plus intelligent : utiliser le symbole ou. Voici comment :

'# je | j’#i' repérera à la fois « et j’aime Vikidia » et « tu vois, je mange ». La barre verticale | représente souvent le ou logique. Elle est très utile pour les filtres de Laura.

Il peut être nécessaire d’aligner de nombreux ou à la suite, notamment pour pallier d’éventuelles variations d’orthographe plutôt exotiques. On utilisera alors plutôt une classe.Pour ce faire, on place entre crochets les lettres à repérer : #p[aiou]f# convient pour « paf », « pif », « pof » et « puf ». #il [éeè]t(ai[st]|éè) une foi[xes]# repère ainsi bon nombre de variantes de la phrase « il était une fois », par exemple « il été une foie ».

Il est possible et souvent très utile d’utiliser les classes étendues : écrire [0123456789] peut ainsi s’abréger par [0-9] ; [abcdefg…(etc.)…xyz] est également plus simple sous la forme [a-z]. Attention, les lettres accentuées et autres caractères d’usage moins courant ne sont pas compris dans la classe [a-z] ; il faut les y ajouter manuellement : [a-zéèâç], par exemple.

On peut enfin vouloir dire qu’on ne veut pas de toute une classe. Il faut alors utiliser un accent circonflexe ^ en début de classe. De cette façon, #p[^a]f# repère tous les mots de trois caractères dont les deux extrémités sont p et f, comme « puf », « pdf », « p6f » ou « p_f », mais pas « paf », car le a est interdit par la classe négative. # [^0-9] # représente tous les caractères encadrés d’espaces et qui ne sont pas un chiffre.

User des quantificateurs

L’expression précédente ne détecte pas la phrase « il été une foi », graphie pourtant imaginable. Cela se contourne et, plus généralement, il est possible de repérer un caractère un nombre de fois arbitraire, de 0 à +∞.

  • a+ signifie « a » ou «aa  » ou «aaaaaaaaaaaaaaaaaaaaaaa  » ou… ;
  • a? signifie « a » ou «  » ;
  • a* signifie «  » ou « a » ou «aa  » ou «aaaaaaaaaaaaaaaaaaaaaaa  » ou… ; c’est donc à la fois + et ? ;
  • a{3} signifie « aaa » ;
  • a{3,6} signifie « aaa » ou « aaaa » ou « aaaaa » ou « aaaaaa » ;
  • a{3,} signifie « aaa » ou « aaaa » ou « aaaaaaaaaaaaaaaaaaaaaaaaaa » ou… ;

De cette façon, un bon moyen d’élargir le repérage de notre expression rationnelle pourrait être de l’écrire #ils? [éeè]t(ai[st]?|éè) une foi[xes]#i (presque l’expression utilisée par Laura).

# [^0-9]+ # représente maintenant tous les mots encadrés d’espaces et qui ne comportent pas de chiffre.

Aller plus loin

Avant de modifier le filtre additionnel…

  • votre modification est-elle nécessaire ?
  • êtes-vous sûr(e) de la portée de votre expression rationnelle ?
  • comptez-vous surveiller la prochaine ronde de Laura pour vous assurer que votre filtrage est correct ?

Si vous avez répondu oui à ces trois questions, vous pouvez modifier le filtre additionnel. Notez que le paramètre doit être activé dans la page Utilisateur:LAURA/config pour que vos modifications soient prises en compte.

Filtre additionnel

Attention Il est fondamental de respecter la syntaxe exposée plus haut !

$tabFiltreAdditionnel0 = array(
    );