From 1b14fa5909bb3af9b556a4920ffbbe73a4c20f98 Mon Sep 17 00:00:00 2001 From: Ludovic Moncla <moncla.ludovic@gmail.com> Date: Fri, 9 Sep 2022 15:14:23 +0200 Subject: [PATCH] Update Tutoriel-geoparsing.ipynb --- Tutoriel-geoparsing.ipynb | 322 +++++++++++++++++++++++++++++++++++--- 1 file changed, 302 insertions(+), 20 deletions(-) diff --git a/Tutoriel-geoparsing.ipynb b/Tutoriel-geoparsing.ipynb index ed6195c..84bf715 100644 --- a/Tutoriel-geoparsing.ipynb +++ b/Tutoriel-geoparsing.ipynb @@ -24,13 +24,13 @@ " - à partir de la librairie Python [Perdido](https://github.com/ludovicmoncla/perdido) dans un [Pandas dataframe](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html) (articles encyclopédiques et descriptions de randonnées) ;\n", " - à partir de fichiers txt importés depuis le disque dur.\n", "- Manipuler et interroger un dataframe\n", - "- Utiliser des librairies de reconnaissance d'entités nommées ([spaCy](https://spacy.io), [Stanza](https://stanfordnlp.github.io/stanza/index.html) et [Perdido](https://github.com/ludovicmoncla/perdido))\n", - "- Utiliser la librarie `Perdido` pour le geoparsing :\n", + "- Utiliser les librairies [Stanza](https://stanfordnlp.github.io/stanza/index.html), [spaCy](https://spacy.io) et [Perdido](https://github.com/ludovicmoncla/perdido) pour la reconnaissance d'entités nommées\n", " - afficher les entités nommées annotées ;\n", - " - cartographier les lieux geocodés.\n", - "- Comparer les résultats de`spaCy`, `Stanza` et `Perdido`\n", - "- Discuter les limites des 3 outils pour la tâche de NER\n", - "- Illustrer la problématique de désambiguïsation des toponymes" + " - comparer les résultats de `Stanza`, `spaCy` et `Perdido` ;\n", + " - discuter les limites des 3 outils pour la tâche de NER.\n", + "- Utiliser la librarie `Perdido` pour le geoparsing :\n", + " - cartographier les lieux geocodés ;\n", + " - illustrer la problématique de désambiguïsation des toponymes." ] }, { @@ -40,19 +40,6 @@ "## 2. Introduction" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2.1 spaCy\n", - "\n", - "\n", - "### 2.2 Stanza NER\n", - "\n", - "\n", - "### 2.3 Perdido Geoparser" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -107,13 +94,253 @@ "metadata": {}, "outputs": [], "source": [ + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "\n", "from perdido.geoparser import Geoparser\n", "from perdido.geocoder import Geocoder\n", - "from perdido.datasets import load_edda_artfl, load_edda_perdido\n", + "\n", + "from perdido.datasets import load_edda_artfl, load_edda_perdido, load_choucas_perdido\n", "\n", "from spacy import displacy" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Chargement et exploration des données\n", + "\n", + "### 4.1 Chargement d'un document texte à partir d'un fichier\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "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", + " 1. articles encyclopédiques (volume 7 de l'Encyclopédie de Diderot et d'Alembert), fournit par l'ARTFL dans le cadre du projet GEODE.\n", + " 2. descriptions de randonnées (chaque description est associée à sa trace GPS. Elles proviennent du site visorando.fr et ont été collectées dans le cadre du projet ANR CHOUCAS." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d = load_choucas_perdido()\n", + "df = d['data'].to_dataframe()\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4.3 Manipulation d'un dataframe" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Reconnaissance d'Entités Nommées (NER)\n", + "\n", + "\n", + "### 5.1 Stanza NER\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.2 SpaCy NER" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 5.3 Perdido Geoparser" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "displacy.render(d['data'][1].to_spacy_doc(), style=\"ent\", jupyter=True) " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. Geoparsing / Geocoding" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# geocoding avec perdido" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# afficher une carte\n", + "d['data'][1].get_folium_map()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 6.2 Résolution de toponymes / désambiguïsation\n", + "\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Exemple de requetes sans stratégies de désambiguisation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Délimiter un zone restreinte lors de la requête\n", + "\n", + "Premier niveau : utilisation d'un code pays." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Deuxième niveau : utilisation d'une bounding box délimitant la zone de recherche" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, @@ -121,6 +348,49 @@ "outputs": [], "source": [] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Désambiguisation basé sur la proximité géographique\n", + "\n", + "Clustering avec la méthode DBSCAN. Cette stratégie est adaptée pour une description d'itinéraire où les différents lieux cités doivent être localisés à proximité les uns des autres." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Résultats avant désambiguisation" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d['data'][1].get_folium_map()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d['data'][1].cluster_disambiguation()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "d['data'][1].get_folium_map()" + ] + }, { "cell_type": "code", "execution_count": null, @@ -128,6 +398,13 @@ "outputs": [], "source": [] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Utilisation du contexte (autres entités nommées repérées dans le texte, relations spatiales, etc...). Développées dans le cadre du projet [Perdido]() (add ref 2014 et 2016) mais pas encore intégré à la librairie Python Perdido. Cette librairie est toujours en cours de développement et d'amélioration. Vos remarques et retours seront les bienvenues." + ] + }, { "cell_type": "code", "execution_count": null, @@ -135,6 +412,11 @@ "outputs": [], "source": [] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] + }, { "cell_type": "code", "execution_count": null, -- GitLab