Filtrage des annotations

Il existe dans Maarch Courrier des outils SQL pour le traitement des annotations contenant des termes apparaissant dans une liste noire.

Il s’agit, dans un premier temps, de lister dans une table SQL les éléments de la liste noire, et dans un second temps de récupérer les annotations concernées, qui pourront être traités par l’administrateur technique de la base de données, par exemple pour suppression des annotations.

Peuplement de la liste noire

Les éléments de la liste noire peuvent être de trois natures : mot unique, groupe de mots, préfixe de mot.

Pour ajouter en liste noire un mot unique (ex. : « éléphant ») ou un groupe de mots (ex. : « pomme de pin »), l’injection SQL est élémentaire :

INSERT INTO blacklist (term) VALUES ('éléphant');
INSERT INTO blacklist (term) VALUES ('pomme de pin');

Pour ajouter en liste noire un préfixe de mot (ex. : « téléo- »), il faut remplacer l’habituel tiret par \w* :

INSERT INTO blacklist (term) VALUES ('téléo\w*');

Retirer un élément de la liste noire se fait également simplement :

DELETE FROM blacklist WHERE term = 'éléphant';

Traitement de la liste noire

La vue SQL bad_notes est un miroir de la table notes référençant uniquement les annotations concernée par la vue blacklist.

SELECT * FROM bad_notes;
 id | identifier | user_id |       creation_date        |                     note_text                      
----+------------+---------+----------------------------+----------------------------------------------------
 79 |        644 |      19 | 2022-07-19 15:56:24.065955 | Je vois un énorme éléphant !
 80 |        644 |      13 | 2022-07-19 15:57:23.729681 | Je me soucie de la téléonomie de cette discipline.
 81 |        639 |      19 | 2022-07-19 15:57:59.088378 | Pomme de pin bloquant la route.
(3 rows)

Attention : selon le nombre d’annotations et la longueur de la liste noire, cette requête peut être longue à l’exécution, puisque chaque annotation est comparée à chaque élément de la liste noire.

On peut voir ici que la recherche est insensible à la casse (« Pomme de pin » vs. « pomme de pin »), et que les courriers et les utilisateurs associés au annotations sont clairement identifiables : colonne identifier pour les res_id (numéro GED) des courriers, et colonne user_id pour les identifiants numériques des utilisateurs.

Il est par exemple possible de supprimer toutes les annotations détectées avec :

DELETE FROM notes WHERE id in (SELECT id FROM bad_notes);

results matching ""

    No results matching ""