" - à 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."
"### 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."
"### 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."
Supports pour l'atelier [Librairies Python et Services Web pour la reconnaissance d’entités nommées et la résolution de toponymes](https://anf-tdm-2022.sciencesconf.org/resource/page/id/11) de la formation CNRS [ANF TDM 2022](https://anf-tdm-2022.sciencesconf.org).
## 1. En bref
Dans ce tutoriel, nous allons apprendre plusieurs choses :
- Charger des jeu de données :
- à 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) ;
- à partir de fichiers txt importés depuis le disque dur.
- Manipuler et interroger un dataframe
- 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))
- Utiliser la librarie `Perdido` pour le geoparsing :
- 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
- afficher les entités nommées annotées ;
- cartographier les lieux geocodés.
- Comparer les résultats de`spaCy`, `Stanza` et `Perdido`
- Discuter les limites des 3 outils pour la tâche de NER
- Illustrer la problématique de désambiguïsation des toponymes
- comparer les résultats de `Stanza`, `spaCy` et `Perdido` ;
- discuter les limites des 3 outils pour la tâche de NER.
- Utiliser la librarie `Perdido` pour le geoparsing :
- cartographier les lieux geocodés ;
- illustrer la problématique de désambiguïsation des toponymes.
%% Cell type:markdown id: tags:
## 2. Introduction
%% Cell type:markdown id: tags:
### 2.1 spaCy
### 2.2 Stanza NER
### 2.3 Perdido Geoparser
%% Cell type:markdown id: tags:
## 3. Configurer l'environnement
### 3.1 Installer les librairies Python
* Si vous avez configuré votre environnement Conda en utilisant le fichier `requirements.txt`, vous pouvez sauter cette étape et aller à la section `3.2 Importer les librairies`.
* Si vous avez configuré votre environnement Conda en utilisant le fichier `environment.yml` ou si vous utilisez un environnement Google Colab / Binder, vous devez installer `perdido` en utilisant `pip` :
%% Cell type:code id: tags:
``` python
!pipinstall--upgradeperdido
```
%% Cell type:markdown id: tags:
* Si vous avez déjà configuré votre environnement conda, soit avec conda, soit avec pip (voir le fichier readme), vous pouvez ignorer la cellule suivante.
* Si vous exécutez ce notebook depuis Google Colab / Binder, vous devez exécuter la cellule suivante :
%% Cell type:code id: tags:
``` python
!pipinstallstanza
```
%% Cell type:markdown id: tags:
### 3.2 Importer les librairies
Tout d'abord, nous allons charger certaines bibliothèques spécifiques de `Perdido` que nous utiliserons dans ce notebook. Ensuite, nous importons quelques outils qui nous aideront à analyser et à visualiser le texte.
### 4.1 Chargement d'un document texte à partir d'un fichier
%% Cell type:code id: tags:
``` python
```
%%Celltype:codeid:tags:
``` python
```
%% Cell type:markdown id: tags:
### 4.2 Chargement d'un jeu de données à partir de la librairie Perdido
Perdido embarque 2 jeux de données :
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.
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.
### 6.2 Résolution de toponymes / désambiguïsation
%% Cell type:markdown id: tags:
Exemple de requetes sans stratégies de désambiguisation
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Délimiter un zone restreinte lors de la requête
Premier niveau : utilisation d'un code pays.
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Deuxième niveau : utilisation d'une bounding box délimitant la zone de recherche
%% Cell type:code id: tags:
``` python
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
Désambiguisation basé sur la proximité géographique
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 id: tags:
#### Résultats avant désambiguisation
%% Cell type:code id: tags:
``` python
d['data'][1].get_folium_map()
```
%% Cell type:code id: tags:
``` python
d['data'][1].cluster_disambiguation()
```
%% Cell type:code id: tags:
``` python
d['data'][1].get_folium_map()
```
%% Cell type:code id: tags:
``` python
```
%% Cell type:markdown id: tags:
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.