CSVM : dictionnaires

2. Un exemple en chimie

Un fichier SDF est une collection de n blocs de données. Chaque bloc contient une molécule (codée au format MDL Molfile) et [0..m] descripteurs stockés sous forme de paires clés – valeurs, soit une table de données moléculaires sérialisée. Cette table peut s’afficher via Chemaxon MarvinView ou OpenMolecules DataWarrior, par exemple :

Pour une telle collection, on souhaite transformer l’espace des descripteurs : suppression ou renommage de certains pour exporter la collection vers un SGBDR chimique, ce qui passe par CSVM en tant que format pivot.

La table CSVM correspondante aura une ligne par molécule après désérialisation (unmarshalling). Nous aurons une colonne pour chaque clé (descripteur) du fichier SDF : number, name, plate, chemist, amount, ref_product, ref_labbook, id_lab, id_team, id_box, rights, chr_row_box, num_col_box. Une autre colonne sera utilisée pour stocker la formule développée 2D de chaque molécules au format SMILES (1).

Sauf que le SGBRD n’acceptera pas ces identifiants de colonne pour l’import (même en SDF) dans ses tables. Il faut donc transformer la table CSVM en utilisant un dictionnaire.

Un premier dictionnaire CSVM (dict1) est utilisé pour filtrer les colonnes CSVM de la collection moléculaire. Les colonnes 1, 2 et 3 du bloc de données listent les mots-clés autorisés dans les ensembles de traduction ‘LOCAL‘, ‘LOCAL2‘ et ‘CN‘. Nous constatons que la table CSVM précédente est exprimée dans le dialecte LOCAL puisque la notion de chimiste créateur de la molécule est identifiée par la colonne ‘chemist‘. Si une traduction se fait de LOCAL vers LOCAL2, toutes les colonnes nommées ‘num_col_box‘ sont renommées en ‘ccol‘.

Nous remarquons que certaines valeurs dans dict1.CN (le dialecte CN) sont définies par des chaines ‘__DEL__‘. Si la traduction se fait de LOCAL/LOCAL2 vers CN, toutes les colonnes marquées explicitement par ‘ __DEL__‘ seront supprimées de la collection résultante :

Il s’agit d’un mécanisme de filtrage intégré à la notion de dictionnaire CSVM.

Programmation Python

La programmation est vraiment simple, prenons le cas d’une traduction vers le dialecteCN‘. Il suffit de charger le fichier CSVM dans un objet c de type csvm_ptr via la fonction csvm_ptr_read_extended_csvm du module buildez.parsers.csvm. Puis d’appliquer le filtre à c en utilisant csvm_dict_file_filter qui charge le dictionnaire et fait la traduction en utilisant l’identifiant du dialecte :

A partir du fichier hofmann_test1.csvm résultant de l’application du dictionnaire, nous pouvons regénérer la table SDF (une interface CSVM / MDL Mol, SDF existe). Le fichier SDF  correspondant montre les formules moléculaires régénérées, avec certains mots-clés manquants ou renommés : number => ID, name => Identificateur, plate => plaque, amount => vrac :

Cet exemple illustre l’utilisation de CSVM comme format intermédiaire pour effectuer des opérations (ici un filtrage simple) sur les tables, très fréquent dans de nombreux domaines scientifiques. CSVM permet une véritable gestion et conservation du fichier initial, considéré comme un ilot de données brutes. La combinaison CSVM et dictionnaire CSVM fourni la documentation minimale mais suffisante (métadonnées, optionnellement des commentaires dans la table et le dictionnaire) pour que des tiers puissent intégrer les données dans un SGBDR ou les exploiter ultérieurement même sans parseur CSVM.

Retour en haut