Génération de table de correspondance ISO vers Wicri pour les noms de pays

De Wicri Outils
LogoDilib.gif
Panneau travaux.png
Bibliothèque Dilib (ressources numériques)

Les notices bibliographiques et certaines données structurées de la recherche utilisent les codifications à 2 ou 3 lettres pour les noms de pays. Cette page introduit la façon de créer une table de correspondance à partir d'une page de référence.

Cette table est principalement utilisée pour la curation des noms de pays.

La norme ISO 3166-1

La norme ISO 3166-1 attribue 3 codes pour les pays du monde :

  • ISO 3166-1 alpha-2 : codes à deux lettres,
  • ISO 3166-1 alpha-3 : codes à trois lettres,
  • ISO 3166-1 numeric : codes à trois chiffres.

Exemples :

  • pour la France : FRA, FR, 250,
  • pour les États-Unis :USA, US, 840.

Pour la table complète voir l'article ISO 3166-1 sur Wicri/Métadonnées.

Les tables ce correspondance dans Dilib

Dans la bibliothèque Dilib, les tables sont gérées dans des fichiers de couple « clé - valeur », à raison d'un couple par ligne Unix en utilisant la tabulation comme séparateur.

Exemple :

    BEL ⇥ Belgique
    FRA ⇥ France

Production d'une table à partir de la page ISO 3166-1

Cette opération se fait en 2 étapes :

  1. récupération de la page
  2. conversion en utilisant un filtre lex

Récupération de la page ISO 3166-1

Une solution simple consiste à utiliser l'API de MediaWiki, plus précisément avec l'entrée « index.php » avec l'option « action=raw ».

En shell, la commande « CURL » qui suit permet de récupérer dans un fichier le contenu brut de la page ISO 3166-1 du wiki Wicri/Métadonnées.

 
WIKI=http://ticri.inpl-nancy.fr/wicri-meta.fr
curl $WIKI/"index.php?title=ISO_3166-1&action=raw" 2> /dev/null > pageIsoPays.txt

Le fichier ainsi récupéré est simplement le contenu de la page correspondante en wiki texte :

 
{{Page importée de Wikipédia|  ...
  ...
== Table de codage ==
  ...
{|border="1" cellspacing="0" cellpadding="2" class="wikitable sortable"
|-
!numé-<br />rique!!alpha<br />-3!!alpha<br />-2
!Nom français usuel
!Nom ISO du pays ou territoire
!Nom dans la langue originale
|-
|004||AFG||AF
|[[Afghanistan]]
|AFGHANISTAN
    ....

Génération de la table

Une solution simple consiste à écrire un filtre en Lex.

Par exemple :

 
%START SAUT
%START TABLE
%START ZA3
%START SZA3
%START PAYS
%%
<SAUT>.                      ;
<SAUT>\n                     ;
<SAUT>"\{|"                  BEGIN TABLE;
<TABLE>.                     ;
<TABLE>\n                    ;
<TABLE>"|-"\n"|"[0-9]+"||"   BEGIN ZA3;
<ZA3>[A-Z]                   ECHO;
<ZA3>"||"                    {putchar('\t'); BEGIN SZA3;}
<SZA3>.                      ;
<SZA3>\n                     ;
<SZA3>"\[\["                 BEGIN PAYS;
<PAYS>"\]\]"                 {putchar('\n'); BEGIN TABLE;}
<TABLE>"|\}"                 BEGIN SAUT;
%%
main()
{
  BEGIN SAUT;
  yylex();
}

Le filtre (dans l'état initial SAUT) saute tout ce qui précède l'apparition du début de la table où l'on passe dans l'état TABLE. On repère un début de zone contenant le code sur 3 lettres par une expression régulière qui fait entrer dans l'état ZA3. Puis on laisse s'imprimer les lettres du code avant de passer dans un état de saut (SZA3) avant d'entrer dans la zone PAYS qui laisse imprimer le nom du pays.