Introduction aux serveurs d'exploration sous Unix

De Wicri Manuel

Ce module donne des premiers éléments pour l'exploration de serveurs d'exploration sous Unix.

Les exemples seront donnés sur le Serveur d'exploration sur la grippe en Belgique.

Organisation HFD

Les serveurs d'exploration utilisent une organisation de fichiers spécifique qui a pour nom : HFD ( Hierarchical File organisation for Documentation ).

Principe

Organisation HFD avec clé décimale

Ils gèrent des collections de documents XML et plus précisément sur une ligne physique (Stream XML).

Chaque document est identifié par une clé séquentielle de longueur fixe (6 caractères). En notation décimale il est possible de ranger 1 000 000 objets.

Dans ce cas, à chaque document Sxml est associé une clé à 6 chiffres (de 000000 à 999999).

  • les 2 premiers chiffres repèrent un répertoire (suffixé par dd),
  • les 2 chiffres du milieu repèrent un fichier (suffixé par df),
  • les 3 derniers repèrent le document dans le fichier (en fait chaque document Sxml est précédé par la clé complète).

Par exemple, la document 123456 sera :

  • le 57ème document Sxml
  • d'un fichier nommé 34.df
  • rangé dans le répertoire 12.dd

Son adresse dans le système de fichier Unix sera alors :

maBiblio.hfd/12.dd/34.df

En fait de façon implicite, l'organisation repose sur des clés hexadécimales.

Première exploration

Pour le serveur GrippeBelgiqueV2, la plateforme Unix d'exploration est située ici :

$WICRI_ROOT/Sante/explor/GrippeBelgique.storage/GrippeBelgiqueV2

Observer le résultat des commandes suivantes :

cd $WICRI_ROOT/Sante/explor/GrippeBelgique.storage/GrippeBelgiqueV2
ls
ls Data
ls Data/Main
ls Data/Main/Exploration
ls Data/Main/Exploration/biblio.hfd
ls Data/Main/Exploration/biblio.hfd/00.dd
ls Data/Main/Exploration/biblio.hfd/00.dd/00.df 
more Data/Main/Exploration/biblio.hfd/00.dd/00.df 
cat Data/Main/Exploration/biblio.hfd/00.dd/00.df | SxmlIndent | more

ls Data/Main/Exploration/Author.i.hfd/00.dd/
head -5 Data/Main/Exploration/Author.i.hfd/00.dd/00.df

ls Data/Main/Exploration/AbsEn.i.hfd/00.dd/
head -5 Data/Main/Exploration/AbsEn.i.hfd/00.dd/00.df

Fichiers inverses ou index

Sur le fichier Hfd « AffPays », la commande :

head -3 Data/Main/Exploration/AffPays.i.hfd/00.dd/00.df

provoque l'impression de :

000000	<idx><kw>Allemagne</kw><lc>allemagne</lc><f>3</f><l><e>000022</e><e>000026</e><e>000096</e></l></idx>
000001	<idx><kw>Australie</kw><lc>australie</lc><f>3</f><l><e>000032</e><e>000036</e><e>000039</e></l></idx>
000002	<idx><kw>Autriche</kw><lc>autriche</lc><f>2</f><l><e>000004</e><e>000013</e></l></idx>

La balise « kw » pour key word contient un nom de pays. Ces pays sont triés par ordre alphabétique.

Le fichier HFD AffPays est en fait un index (ou fichier inverse) qui permet un accès rapide par le contenu.

En allant sur l'entrée Allemagne de l'index pays du serveur sur la grippe en Belgique, on constate que ce pays indexe les documents dont les clés sont 000022, 000026, 000096.

Exercice, en explorant le fichier biblio.hfd, vérifier cette cohérence.

Organisation d'une plateforme d'exploration et de curation

L'expression serveur d'exploration désigne un ensemble de procédures qui permettent d'explorer un corpus, généralement composé de textes scientifiques avec des métadonnées structurées.

En réalité l'approche ScienceExplor propose un ensemble de serveurs d'exploration pour travailler sur un ensemble de corpus à différents stages de transformation.

Organisation physique

A la racine d'un serveur, la commande précédente ls montre un ensemble de répertoires :

- GrippeBelgiqueV2 -+                  $EXPLOR_AREA
                    +- Data
                    +- Import
                    +- Input
                    +- Make
                    +- Site
                    +- bin

Le répertoire Data

Le répertoire Data, dans les cas simples, (hors ISTEX), contient l'ensemble des données dans leur forme exploratoire (en XML, autour de la DTD TEI, avec des homogénéisations de vocabulaires).

Il est organisé en flux (stream) et étapes (step).

Dans le cas d'un serveur monosource (ici PubMed) il y a un seul flux nommé Main.

Ce flux est organisé en 3 étapes : Corpus, Curation, Exploration.

Pour chaque étape, on trouve un ensemble de « fichiers HFD » :

  • un fichier biblio.hfd qui contient les documents dans leurs différents stades d'élaboration.
  • des fichiers d'index (fichiers inverses), exemple AffPays.i.hfd.

Le répertoire Site

Ce répertoire Data peut être exploré sous Unix, ou par les fonction php qui sont regroupées dans le répertoire Site.

Le répertoire Site est organisé dans la perspective d'une version multilingue.

En faisant «  ls Site/fr/Main  » vous retrouvez (entre autres choses) des répertoires liés aux étapes.

Vous pouvez comparer :

Ou encore (observer également l'url) :

Le répertoire Import

Il contient les données brutes :

Les répertoires bin, Make et Input

Ces répertoires ont une fonction très techniques. Ils sont créés par le programme de génération.

Le répertoire bin contient un ensemble de commandes shell. Voir :

ls bin
cat bin/MainCreateCorpus.sh
cat bin/MainCorpusBiblio.sh

La génération d'une plateforme est pilotée par un « makefile » qui définit les relations de dépendance entre les actions. Il sera utilisé par une commande unix nommée make qui lance les actions en fonction de ces dépendances.

Si bous visualisez ce fichier (cat bin/area.mk), vous verrez par exemple :

$(EXPLOR_AREA)/Make/Main.stream: \
             $(EXPLOR_AREA)/Make/Main/Corpus.step \
             $(EXPLOR_AREA)/Make/Main/Curation.step \
             $(EXPLOR_AREA)/Make/Main/Exploration.step 
        touch $(EXPLOR_AREA)/Make/Main.stream

Cela signifie : pour fabriquer les données du flux Main, il faut fabriquer les 3 étapes Corpus, Curation et Exploration. Puis signaler la fin de ce travail avec une commande touch.

Plus loin, on trouve :

$(EXPLOR_AREA)/Make/Main/Corpus.step: \
                  $(EXPLOR_AREA)/Make/Main/Corpus/biblio \
                   ...
                  $(EXPLOR_AREA)/Make/Main/Corpus/AutAff.i.index 
         touch $(EXPLOR_AREA)/Make/Main/Corpus.step

Cela signifie pour faire l'étape Corpus, il faut fabriquer la bibliographie et des fichiers inverses.

Puis :

GrippeBelgiqueV2/Make/Main/Corpus/biblio:  \
                GrippeBelgiqueV2/Import/pubmed_result.xml
        sh GrippeBelgiqueV2/bin/MainCorpusBiblio.sh 
        touch GrippeBelgiqueV2/Make/Main/Corpus/biblio

La biblographie dépend du fichier pubmed_result.xml (plus précisément s'il est modifié, il faut re-générer le serveur). Pour cela, exécuter MainCorpusBiblio.sh </sh>. Puis signaler que cela s'est bien passé avec un touch.

Le répertoire Make contient les fichiers de synchronisation créés par les commandes touch.

La répertoire Input contient des tables de paramètres, codées en xml.

Quelques commandes sur les organisations HFD

La bibliothèque Dilib contient un ensemble de commandes pour manipuler les organisations Hfd.

HfdCat

HfdCat est le nom d'une commande qui permet de d'accéder séquentiellement (comme un cat) à l'ensemble des documents d'un fichier HFD.

On peut ainsi atteindre tous les documents d'un corpus et leur appliquer des commandes.

Par exemple, pour voir l'effet de la curation, si l'on veut savoir combien de documents contiennent les mots Brussels ou Bruxelles, il faut faire :

HfdCat Data/Main/Exploration/biblio.hfd | grep Brussels | wc

HfdCat Data/Main/Corpus/biblio.hfd | grep Brussels | wc

HfdCat Data/Main/Corpus/biblio.hfd | grep Bruxelles | wc

HfdCat Data/Main/Exploration/biblio.hfd | grep Bruxelles | wc

Pour explorer un fichier inverse, on peut faire :

HfdCat Data/Main/Exploration/AffPays.i.hfd | SxmlIndent | more

SxmlSelect

La commande SxmlSelect vue précédemment va naturellement s'appliquer sur les ensembles Hfd.

Pour éditer la liste des titres d'un corpus qui contiennent le radical Bru on peut faire :

 HfdCat Data/Main/Exploration/biblio.hfd   \
  | SxmlSelect -g record/TEI/teiHeader/fileDesc/titleStmt/title/1 -p @1 -p -@g1 \
  | grep Bru

Vérifier sur le site en utilisant les numéros de documents...


HfdSelect

Cette commande permet de sélectionner un document à partir de sa clé.

Par exemple, la commande :

HfdSelect -h  Data/Main/Exploration/AffPays.i.hfd -nk 000005

provoque l'impresssion de la cinquième entrée de l'index Pays :

<idx><kw>Croatie</kw><lc>croatie</lc><f>2</f><l><e>000004</e><e>000008</e></l></idx>

Autre exemple, en suivant ce lien :

Influenza-like-illness and clinically diagnosed flu: disease burden, costs and quality of life for patients seeking ambulatory care or no professional care at all.

on arrive sur un document du serveur d'exploration.

En fin de cette page, on trouve des éléments pour extraire un document.

HfdSelect -h Data/Main/Exploration/biblio.hfd -nk 000037 | SxmlIndent | more

HfdIndexSelect

La commande HfdIndexSelect permet d'extraire un document d'une structure HFD à partir de sa clé d'index.

HfdIndexSelect -h  Data/Main/Exploration/AffPays.i -k Allemagne 
<idx><kw>Allemagne</kw><lc>allemagne</lc><f>3</f><l><e>000022</e><e>000025</e><e>000096</e></l></idx>
HfdIndexSelect -h  Data/Main/Exploration/AffPays.i -k Allemagne | SxmlIndent
<idx>
  <kw>Allemagne</kw>
  <lc>allemagne</lc>
  <f>3</f>
  <l>
    <e>000022</e>
    <e>000025</e>
    <e>000096</e>
  </l>
</idx>
HfdIndexSelect -h  Data/Main/Exploration/AffPays.i -Sk Allemagne  
           
000022
000025
000096

combinaison de commandes

Les commandes HfdIndexSelect et HfdIndex peuvent se combiner pour permettre d'explorer un index dans un corpus.

Par exemple, en reprenant l'exemple précédent sur la commande SxmSelect, on peut éditer la liste des titres indexés par Allemagne.

Observer le résultat de la commande

HfdIndexSelect -h  Data/Main/Exploration/AffPays.i -Sk Allemagne  \
   | HfdSelect -h Data/Main/Exploration/biblio.hfd                \
   | SxmlSelect -g record/TEI/teiHeader/fileDesc/titleStmt/title/1 -p -@g1


Vérifier sur le site...

Un exemple de recherche en utilisant GeoNames

Ce paragraphe montre comment utiliser GeoNames pour trouver des documents contenant des noms de villes belges dans les résumés du serveur sur la grippe en Belgique.

Le site GeoName (http://www.geonames.org/) contient notamment des fichiers de codes postaux.

Pour récupérer les codes postaux, il faut procéder ainsi sur MacBook :

curl http://download.geonames.org/export/zip/BE.zip -o BE.zip

ou sur Linux

wget http://download.geonames.org/export/zip/BE.zip

Pour décompresser le résultat, il suffit de faire :

unzip BE.zip

On récupère notamment un fichier BE.txt. Il contient une liste de colonnes séparées par des tabulations.

Pour extraire une colonne, on peut utiliser la commande SxmlSelect. Exemple :

 cat BE.txt | SxmlSelect -p @3 | head -10

Pour obtenir une liste triée, on ajoute un sort (avec l'option -u pour réduire les doublons).

 cat BE.txt | SxmlSelect -p @3 | sort -u | head -10

Pour utiliser cette liste, on range le résultat dans un fichier PostalCodeBE.dict. Pour cela, on va travailler dans un répertoire de test :


 cat BE.txt | SxmlSelect -p @3 | sort -u > PostalCodeBE.dict

Pour rendre les commandes plus lisibles on crée une variable d'environnement $EXPLOR_AREA

 EXPLOR_AREA=$WICRI_ROOT/Sante/explor/GrippeBelgique.storage/GrippeBelgiqueV2

Vérifier en comptant par exemple le nombre de documents du corpus

 HfdCat $EXPLOR_AREA/Data/Main/Exploration/biblio.hfd | wc

On va maintenant appliquer une nouvelle commande SxmlFindText :

 HfdCat $EXPLOR_AREA/Data/Main/Exploration/biblio.hfd  \
    | SxmlFindText -s farms -b 20 -a 20

L'option -s désigne une chaîne (string), ici le mot anglais farms Les options -a et -b donnent le nombre de caractères avant et après la chaine dans le texte.

Les lignes de résultats ont l'allure suivante :

000035	1/2/1/4/5/1	record/pubmed/MedlineCitation/Article/Abstract/AbstractText	750	ccurred from nearby 	farms	 in the Dutch provin
  • La première colonne donne la cle HFD du document (ici 000035).
  • La deuxième donne un chemin avec une vision interne
  • La troisième est plus lisible : la chaîne est dans l'élemant AxtractText contenu dans Abstract ec
  • La quatrième 20 caractères avant farms, suivie de farms et de 20 mots après.

Exploitez maintenant le résultat de :

HfdCat $EXPLOR_AREA/Data/Main/Exploration/biblio.hfd  \
    | SxmlFindText -D PostalCodeBE.dict -b 20 -a 20