diff --git a/Tutoriel-geoparsing.ipynb b/Tutoriel-geoparsing.ipynb
index de096a26fdfc703e15e4abf2696c812be8cd07dd..4e204c958ed305e152c44bf7fb2422dabe4573f4 100644
--- a/Tutoriel-geoparsing.ipynb
+++ b/Tutoriel-geoparsing.ipynb
@@ -90,7 +90,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 1,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -116,7 +116,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -125,7 +125,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -142,9 +142,17 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "* ARQUES, (Géog.) petite ville de France, en Normandie, au pays de Caux, sur la petite riviere d'Arques. Long. 18. 50. lat. 49. 54.\n"
+     ]
+    }
+   ],
    "source": [
     "print(content)"
    ]
@@ -155,31 +163,242 @@
    "source": [
     "### 4.2 Chargement d'un jeu de données à partir de la librairie Perdido\n",
     "\n",
-    "Perdido embarque 2 jeux de données : \n",
+    "Perdido embarque deux jeux de données : \n",
     " 1. articles encyclopédiques (volume 7 de l'Encyclopédie de Diderot et d'Alembert (1751-1772)), fournit par l'[ARTFL](https://encyclopedie.uchicago.edu) dans le cadre du projet [GEODE](https://geode-project.github.io) ;\n",
     " 2. descriptions de randonnées (chaque description est associée à sa trace GPS. Elles proviennent du site [www.visorando.fr](https://www.visorando.com) et ont été collectées dans le cadre du projet [ANR CHOUCAS](http://choucas.ign.fr).\n",
     "\n",
-    " Dans un premier temps nous allons nous intéresser au jeu de données des articles encyclopédiques. Ce jeu de données est présent dans la librairie dans 2 versions, une version brute (articles fournis par l'ARTFL) au format dataframe et une version déjà annotée par Perdido (format PerdidoCollection). Nous allons charger la version brute et voir comment manipuler un dataframe."
+    " Dans un premier temps nous allons nous intéresser au jeu de données des articles encyclopédiques. Ce jeu de données est présent dans la librairie en deux versions, une version \"brute\" (articles fournis par l'ARTFL) au format dataframe et une version déjà annotée par Perdido (format PerdidoCollection). Nous allons charger la version brute et voir comment manipuler un dataframe."
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Charger le jeu de données :"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [],
    "source": [
-    "dataset_artfl = load_edda_artfl()"
+    "dataset_artfl = load_edda_artfl()\n",
+    "data_artfl = dataset_artfl['data']"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Afficher les informations sur le jeu de données :"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 23,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "RangeIndex: 3385 entries, 0 to 3384\n",
+      "Data columns (total 7 columns):\n",
+      " #   Column     Non-Null Count  Dtype \n",
+      "---  ------     --------------  ----- \n",
+      " 0   filename   3385 non-null   object\n",
+      " 1   volume     3385 non-null   int64 \n",
+      " 2   number     3385 non-null   int64 \n",
+      " 3   head       3384 non-null   object\n",
+      " 4   normClass  3384 non-null   object\n",
+      " 5   author     3384 non-null   object\n",
+      " 6   text       3385 non-null   object\n",
+      "dtypes: int64(2), object(5)\n",
+      "memory usage: 185.2+ KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "data_artfl.info()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "On remarque que certaines colonnes ont une données manquantes (3384 lignes non nulles contre 3385 lignes au total). Pour la suite des opérations que nous allons réaliser il est nécessaire de supprimer les lignes incomplètes.\n",
+    "\n",
+    "* Supprimer la ligne incomplète :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 25,
    "metadata": {},
    "outputs": [],
    "source": [
-    "dataset_choucas =  = load_choucas_perdido()\n",
-    "df = d['data'].to_dataframe()\n",
-    "df.head()"
+    "data_artfl.dropna(inplace=True)     # data_artfl = data_artfl.dropna()\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Vérifier le résultat :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "<class 'pandas.core.frame.DataFrame'>\n",
+      "Int64Index: 3384 entries, 0 to 3384\n",
+      "Data columns (total 7 columns):\n",
+      " #   Column     Non-Null Count  Dtype \n",
+      "---  ------     --------------  ----- \n",
+      " 0   filename   3384 non-null   object\n",
+      " 1   volume     3384 non-null   int64 \n",
+      " 2   number     3384 non-null   int64 \n",
+      " 3   head       3384 non-null   object\n",
+      " 4   normClass  3384 non-null   object\n",
+      " 5   author     3384 non-null   object\n",
+      " 6   text       3384 non-null   object\n",
+      "dtypes: int64(2), object(5)\n",
+      "memory usage: 211.5+ KB\n"
+     ]
+    }
+   ],
+   "source": [
+    "data_artfl.info()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Afficher la liste des premiers articles :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>filename</th>\n",
+       "      <th>volume</th>\n",
+       "      <th>number</th>\n",
+       "      <th>head</th>\n",
+       "      <th>normClass</th>\n",
+       "      <th>author</th>\n",
+       "      <th>text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>0</th>\n",
+       "      <td>volume07-1.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1</td>\n",
+       "      <td>Title Page</td>\n",
+       "      <td>unclassified</td>\n",
+       "      <td>unsigned</td>\n",
+       "      <td>ENCYCLOPÉDIE, ou DICTIONNAIRE RAISONNÉ DES SCI...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>1</th>\n",
+       "      <td>volume07-10.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>10</td>\n",
+       "      <td>FOESNE ou FOUANE</td>\n",
+       "      <td>Marine | Pêche</td>\n",
+       "      <td>Bellin</td>\n",
+       "      <td>FOESNE ou FOUANE, sub. s. (Marine &amp; Pêche.) c'...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>2</th>\n",
+       "      <td>volume07-100.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>100</td>\n",
+       "      <td>Fond de la hune</td>\n",
+       "      <td>unclassified</td>\n",
+       "      <td>Bellin</td>\n",
+       "      <td>Fond de la hune ; ce sont les planches qu on p...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>3</th>\n",
+       "      <td>volume07-1000.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1000</td>\n",
+       "      <td>Fronteau</td>\n",
+       "      <td>Bourrelier | Sellier</td>\n",
+       "      <td>Diderot</td>\n",
+       "      <td>* Fronteau, terme de Sellier-Bourrelier ; c'es...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>4</th>\n",
+       "      <td>volume07-1001.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1001</td>\n",
+       "      <td>FRONTIERE</td>\n",
+       "      <td>Géographie</td>\n",
+       "      <td>Diderot</td>\n",
+       "      <td>* FRONTIERE, s. f. (Géog.) se dit des limites,...</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "            filename  volume  number              head             normClass  \\\n",
+       "0     volume07-1.tei       7       1        Title Page          unclassified   \n",
+       "1    volume07-10.tei       7      10  FOESNE ou FOUANE        Marine | Pêche   \n",
+       "2   volume07-100.tei       7     100   Fond de la hune          unclassified   \n",
+       "3  volume07-1000.tei       7    1000          Fronteau  Bourrelier | Sellier   \n",
+       "4  volume07-1001.tei       7    1001         FRONTIERE            Géographie   \n",
+       "\n",
+       "     author                                               text  \n",
+       "0  unsigned  ENCYCLOPÉDIE, ou DICTIONNAIRE RAISONNÉ DES SCI...  \n",
+       "1    Bellin  FOESNE ou FOUANE, sub. s. (Marine & Pêche.) c'...  \n",
+       "2    Bellin  Fond de la hune ; ce sont les planches qu on p...  \n",
+       "3   Diderot  * Fronteau, terme de Sellier-Bourrelier ; c'es...  \n",
+       "4   Diderot  * FRONTIERE, s. f. (Géog.) se dit des limites,...  "
+      ]
+     },
+     "execution_count": 27,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "data_artfl.head()"
    ]
   },
   {
@@ -189,13 +408,288 @@
     "### 4.3 Manipulation d'un dataframe"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Nous avons maintenant accès à tous les attributs et méthodes de l'objet [dataframe](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html). Par exemple, nous pouvons facilement connaître le nombre de lignes dans notre dataframe qui correspond au nombre d'articles dans notre corpus :"
+   ]
+  },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 28,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Il y a 3384 articles dans le jeu de données.\n"
+     ]
+    }
+   ],
+   "source": [
+    "n = data_artfl.shape[0]\n",
+    "print('Il y a ' + str(n) + ' articles dans le jeu de données.')"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "#### 4.3.1 Recherche par métadonnées\n",
+    "\n",
+    "\n",
+    "Maintenant que les données sont chargées dans un dataframe, nous pouvons sélectionner des groupes d'articles sur la base de leurs métadonnées.\n",
+    "\n",
+    "Par exemple, nous pouvons filtrer les données sur la base de l'auteur.\n",
+    "\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "* Extraire les articles rédigés par Jaucourt :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 29,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "698 articles ont été rédigés par Jaucourt\n"
+     ]
+    }
+   ],
+   "source": [
+    "req = 'Jaucourt'\n",
+    "d_Jaucourt = data_artfl.loc[data_artfl['author'] == req]\n",
+    "\n",
+    "n = d_Jaucourt.shape[0]\n",
+    "print(str(n) + ' articles ont été rédigés par '+ req)"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 30,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/html": [
+       "<div>\n",
+       "<style scoped>\n",
+       "    .dataframe tbody tr th:only-of-type {\n",
+       "        vertical-align: middle;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe tbody tr th {\n",
+       "        vertical-align: top;\n",
+       "    }\n",
+       "\n",
+       "    .dataframe thead th {\n",
+       "        text-align: right;\n",
+       "    }\n",
+       "</style>\n",
+       "<table border=\"1\" class=\"dataframe\">\n",
+       "  <thead>\n",
+       "    <tr style=\"text-align: right;\">\n",
+       "      <th></th>\n",
+       "      <th>filename</th>\n",
+       "      <th>volume</th>\n",
+       "      <th>number</th>\n",
+       "      <th>head</th>\n",
+       "      <th>normClass</th>\n",
+       "      <th>author</th>\n",
+       "      <th>text</th>\n",
+       "    </tr>\n",
+       "  </thead>\n",
+       "  <tbody>\n",
+       "    <tr>\n",
+       "      <th>5</th>\n",
+       "      <td>volume07-1002.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1002</td>\n",
+       "      <td>FRONTIGNAN</td>\n",
+       "      <td>Géographie</td>\n",
+       "      <td>Jaucourt</td>\n",
+       "      <td>FRONTIGNAN, (Géog.) petite ville de France. au...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>29</th>\n",
+       "      <td>volume07-1024.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1024</td>\n",
+       "      <td>FROWARD, le cap.</td>\n",
+       "      <td>Géographie</td>\n",
+       "      <td>Jaucourt</td>\n",
+       "      <td>FROWARD, le cap. (Géog.) &amp; par les François le...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>32</th>\n",
+       "      <td>volume07-1027.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1027</td>\n",
+       "      <td>FRUGALITÉ</td>\n",
+       "      <td>Morale</td>\n",
+       "      <td>Jaucourt</td>\n",
+       "      <td>FRUGALITÉ, (Morale.) simplicité de moeurs &amp; de...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>37</th>\n",
+       "      <td>volume07-1031.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1031</td>\n",
+       "      <td>Fruit verreux</td>\n",
+       "      <td>Histoire naturelle</td>\n",
+       "      <td>Jaucourt</td>\n",
+       "      <td>Fruit verreux, (Hist. nat.) c'est le nom qu'on...</td>\n",
+       "    </tr>\n",
+       "    <tr>\n",
+       "      <th>38</th>\n",
+       "      <td>volume07-1032.tei</td>\n",
+       "      <td>7</td>\n",
+       "      <td>1032</td>\n",
+       "      <td>Fruit, (art de conserver le)</td>\n",
+       "      <td>Economie rustique</td>\n",
+       "      <td>Jaucourt</td>\n",
+       "      <td>Fruit, (art de conserver le) Economie rustiq. ...</td>\n",
+       "    </tr>\n",
+       "  </tbody>\n",
+       "</table>\n",
+       "</div>"
+      ],
+      "text/plain": [
+       "             filename  volume  number                           head  \\\n",
+       "5   volume07-1002.tei       7    1002                     FRONTIGNAN   \n",
+       "29  volume07-1024.tei       7    1024               FROWARD, le cap.   \n",
+       "32  volume07-1027.tei       7    1027                      FRUGALITÉ   \n",
+       "37  volume07-1031.tei       7    1031                  Fruit verreux   \n",
+       "38  volume07-1032.tei       7    1032  Fruit, (art de conserver le)    \n",
+       "\n",
+       "             normClass    author  \\\n",
+       "5           Géographie  Jaucourt   \n",
+       "29          Géographie  Jaucourt   \n",
+       "32              Morale  Jaucourt   \n",
+       "37  Histoire naturelle  Jaucourt   \n",
+       "38   Economie rustique  Jaucourt   \n",
+       "\n",
+       "                                                 text  \n",
+       "5   FRONTIGNAN, (Géog.) petite ville de France. au...  \n",
+       "29  FROWARD, le cap. (Géog.) & par les François le...  \n",
+       "32  FRUGALITÉ, (Morale.) simplicité de moeurs & de...  \n",
+       "37  Fruit verreux, (Hist. nat.) c'est le nom qu'on...  \n",
+       "38  Fruit, (art de conserver le) Economie rustiq. ...  "
+      ]
+     },
+     "execution_count": 30,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "d_Jaucourt.head()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Autre exemple, nous pouvons filtrer les articles en fonction de leur classification dans l'*Encyclopédie*. \n",
+    "Pour cela nous utiliserons le champ `normclass`, qui indique la classifications retenue (et normalisée) par l'ARTFL. \n",
+    "\n",
+    "Par exemple pour la classe 'Géographie', nous pouvons faire la requête suivante (le résultat est stocké dans un nouveau cadre de données `df_geo` : "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 31,
+   "metadata": {},
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "496 articles sont classés en Géographie\n"
+     ]
+    }
+   ],
+   "source": [
+    "req = 'Géographie'\n",
+    "d_geo = data_artfl[data_artfl['normClass'].str.contains(req, case=False)]\n",
+    "\n",
+    "n = d_geo.shape[0]\n",
+    "print(str(n) + ' articles sont classés en '+ req)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "On peut également regrouper les données selon un ou plusieurs attribut (colonnes) et compter le nombre de données de chaque groupe.\n",
+    "\n",
+    "* Afficher le nombre d'articles classés en Géographie par auteur :"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 33,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "author\n",
+       "Desmarest                            1\n",
+       "Diderot                              1\n",
+       "Jaucourt                           476\n",
+       "La Condamine                         1\n",
+       "Mallet                               1\n",
+       "Robert de Vaugondy                   2\n",
+       "Robert de Vaugondy & d'Alembert      1\n",
+       "unsigned                            13\n",
+       "Name: filename, dtype: int64"
+      ]
+     },
+     "execution_count": 33,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "d_geo.groupby(['author'])[\"filename\"].count()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
    "metadata": {},
-   "outputs": [],
    "source": []
   },
+  {
+   "cell_type": "code",
+   "execution_count": 38,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "\"FRONTIGNAN, (Géog.) petite ville de France. au Bas-Languedoc, connue par ses excellens vins muscats, & ses raisins de caisse qu'on appelle passerilles. Quelques savans croyent, sans en donner de preuves, que cette ville est le forum Domitii des Romains. Elle est située sur l'étang de Maguelone, à six lieues N. E. d'Agde, & cinq S. O. de Montpellier. Long. 15d. 24'. lat. 43d. 28'. (D. J.)\""
+      ]
+     },
+     "execution_count": 38,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "data_artfl.loc[data_artfl['head'] == 'FRONTIGNAN'].text.item()"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},