Mise à jour de la version 6 du référentiel TAXREF de l’INPN

Suite à l’observation de certaines erreurs, j’ai vérifié globalement les erreurs contenu dans TAXREF v6 et j’ai réalisé les correctifs détaillés ci-dessous.

Vérification et correction des noms latins et des noms d’auteurs

Je viens d’analyser les espaces contenus dans les noms de champs lb_nom et lb_auteur à l’aide de la requête suivante :

SELECT cd_nom, 
       REPLACE(lb_nom, ' ', '~')   AS nom, 
       REPLACE(lb_auteur, ' ', '~')AS auteur 
FROM   tmp.inpn_taxref 
WHERE  lb_nom ~* '(\s{2,})' 
        OR lb_auteur ~* '\s{2,}' 
        OR TRIM(lb_nom) <> lb_nom 
        OR TRIM(lb_auteur) <> lb_auteur;

Cette requête a retourné 1025 lignes contenant des erreurs. Comme vous pouvez le voir dans la requête, j’ai remplacé les espaces par des tildes (~) pour améliorer la lisibilité des résultats.

J’ai corrigé les données avec la requête suivante :

UPDATE tmp.inpn_taxref 
SET    lb_nom = Regexp_replace(TRIM(lb_nom), '[\s]{2,}', ' ', 'g') :: VARCHAR, 
       lb_auteur = Regexp_replace(TRIM(lb_auteur), '[\s]{2,}', ' ', 'g') :: VARCHAR 
WHERE  lb_nom ~* '\s{2,}' 
        OR lb_auteur ~* '\s{2,}' 
        OR TRIM(lb_nom) <> lb_nom 
        OR TRIM(lb_auteur) <> lb_auteur;

Il existe des doublons de double-cotes. Je les ai recherché avec la requête suivante :

SELECT cd_nom, 
       lb_nom AS nom, 
       lb_auteur AS auteur 
FROM   tmp.inpn_taxref 
WHERE  lb_nom ~* '"{2,}' 
        OR lb_auteur ~* '"{2,}';

Cette dernière me retourne 18 résultats que j’ai corrigé ainsi:

UPDATE tmp.inpn_taxref 
SET    lb_nom = Regexp_replace(TRIM(lb_nom), '["]{2,}', '"', 'g') :: VARCHAR, 
       lb_auteur = Regexp_replace(TRIM(lb_auteur), '["]{2,}', '"', 'g') :: VARCHAR 
WHERE  lb_nom ~* '"{2,}' 
        OR lb_auteur ~* '"{2,}';

Il existe aussi dans le fichier des cotes anglaises “” sur un nom d’espèce et sur un nom d’auteur. Dans mon cas l’intégration des données à posé un problème d’encodage. Ducoup les cotes ne sont pas visible mais le problème apparaît dans une requête lors de l’analyse spécifiques des noms en zoologie.

J’ai testé si certains noms d’auteurs ne contenait pas au moins un caractère lettré :

SELECT cd_nom, 
       lb_nom    AS nom, 
       lb_auteur AS auteur 
FROM   tmp.inpn_taxref 
WHERE  lb_auteur !~* '[a-z]';

J’ai corrigé 5 lignes avec la requête suivante:

UPDATE tmp.inpn_taxref 
SET    lb_auteur = '' 
WHERE  lb_auteur !~* '[a-z]';

Analyse spécifiques des noms en zoologie

Par la suite j’ai également souhaité vérifier le contenu des noms définis dans la base de données pour savoir s’ils sont conformes avec la Code Internationale de Nomenclature Zoologique.

-- Article 27 du ICNZ : aucun nom latin ne doit contenir de ligature entre les lettres, d'apostrophe ou de signe diachronique
-- Se référer à l'article 32.5, 33.3, sur la correction de l'orthographe des noms
SELECT * 
FROM   tmp.inpn_taxref 
WHERE  lb_nom !~* '^[a-z\s()?."]*$' 
       AND regne = 'Animalia';

D’après l’observation, je pense que les taxons contenant des termes erronés ont été inscrits comme synonymie et ont fait l’objet de nouvelles entrées dans la base avec le terme correctement orthographié.
J’ai donc réduit cette requête au taxon de référence

SELECT * 
FROM   tmp.inpn_taxref 
WHERE  lb_nom !~* '^[a-z\s()?."]*$' 
       AND regne = 'Animalia'
       AND cd_nom = cd_ref;

Ainsi, la requête permet de voir l’ensemble des erreurs sur les noms de taxon valides contenant des caractères qui ne sont normalement pas conformes (sauf pour l’exception du trait d’union en 32.5.2.4.3. comme par exemple de x-album).
Le nombre de résultat n’est pas très important je n’ai pas jugé bon de faire un regex plus complexe pour le moment.

  1. Il reste toutefois le problème sur les trait d’union pour:
    • Miocalles sancti-johni à rectifier en Miocalles sanctijohni
    • Phlebotomus colas-belcouri à rectifier en Phlebotomus colasbelcouri
  2. J’ai aussi observé des signes diachroniques :
    • Mendaña peut être converti en Medana
    • remplacer Aphanoconia küsteriana par Aphanoconia kuesteriana (conversion de l’autrichien)
    • remplacer Phlebotomus saülensis par Phlebotomus saulensis (conversion de français)
  3. “Turdus” ulietensis contenant des caractères mal encodés remplacés par "Turdus" ulietensis
  4. Certains termes préfixés par [unassigned] sont mentionnés comme niveau intermédiaire supérieur (super-ordre, super-famille) dans la GBIF à celui mentionné dans TAXREF. Je vois pas encore quoi en faire donc j’ai laissé en l’état car ce débat n’est pas de mon ressort.

Je n’ai pas tester les termes de liaison, les capitales et les espaces consécutifs dans les prénom aux abréviations des nom d’auteur. L’INPN n’a pour le moment pas diffusé de référentiel d’auteur avec des alias utilisés pour certains règnes donc je n’ai pas fait de vérification sur ce point mais cela peut être une orientation de travail.

Il me reste à vérifier les taxons spécifiques aux autres règnes que je n’ai pas encore eu le temps de vérifier.

Vérification et correction du nom complet et du nom valide

Suite à la correction de l’ensemble des noms, il est nécessaire de corriger les le nom complet et le nom valide.

J’ai vérifié les différences entre nom + ‘ ‘ + auteur et nom complet et je me retrouve avec 8795 lignes à corriger… :

SELECT cd_nom, 
       nom_complet 
FROM   tmp.inpn_taxref 
WHERE  nom_complet <> TRIM(CONCAT(lb_nom, ' ', lb_auteur)) :: VARCHAR;

J’ai utilisé la requête suivante:

UPDATE tmp.inpn_taxref 
    SET nom_complet = TRIM(CONCAT(lb_nom, ' ', lb_auteur)) :: VARCHAR
WHERE  nom_complet <> TRIM(CONCAT(lb_nom, ' ', lb_auteur)) :: VARCHAR;

Trim est nécessaire dans les cas d’anonymat de l’auteur

Suite à ce correctif j’ai analysé ne nombre taxon de référence qui nécessite d’être mis à jour. La requête suivante nous a retourné 5572 lignes à modifier :

SELECT cd_nom, cd_ref, 
       nom_complet, nom_valide 
FROM   tmp.inpn_taxref 
WHERE  cd_nom = cd_ref 
       AND nom_complet <> nom_valide;

Ducoup j’ai vérifié le nombre de taxon impactés ce qui nous retourne 22754 lignes à modifier :

SELECT t1.cd_ref, 
       t1.cd_nom, 
       t1.nom_complet, 
       t1.nom_valide 
FROM   tmp.inpn_taxref AS t1, 
       (SELECT nom_valide 
        FROM   tmp.inpn_taxref 
        WHERE  cd_nom = cd_ref 
               AND nom_complet <> nom_valide)AS t2 
WHERE  t1.nom_valide = t2.nom_valide

J’ai corrigé cette erreur avec la requête suivante:

UPDATE tmp.inpn_taxref 
SET    nom_valide = t.new_nom_valide 
FROM  (SELECT nom_complet AS new_nom_valide, 
              nom_valide 
       FROM   tmp.inpn_taxref 
       WHERE  cd_nom = cd_ref 
              AND nom_complet <> nom_valide) AS t 
WHERE  tmp.inpn_taxref.nom_valide = t.nom_valide

Ajout du taxon racine pour la gestion récursive de l’ensemble de l’arbre:

INSERT INTO tmp.inpn_taxref(
            cd_nom, cd_ref, cd_taxsup, rang, 
            lb_nom, nom_complet, nom_valide, 
            nom_vern, nom_vern_eng)
VALUES      (349525 , 349525 , 0, 'LIFE', 'Arbor Vitae','Arbor Vitae','Arbor Vitae','Arbre du vivant','Tree of life' );

À propos de gglafouine

Je suis actuellement en poste dans le Groupe Nicollin en tant que Cartographe. J'ai pris l'initiative de mettre en place ce blog en 2008 afin de partager mes connaissances, mes problématiques et mes interrogations. Ainsi, cette plateforme me sert d'appui dans mon travail et d'interface d'échange avec mes collègues.
Ce contenu a été publié dans Biodiversité, Référentiel, avec comme mot(s)-clef(s) , , . Vous pouvez le mettre en favoris avec ce permalien.

Laisser un commentaire