Nouvelle version de l'API de géocodage prochainement disponible (que vous pouvez tester)

L’API de géocodage disponible sur adresse.data.gouv.fr va prochainement évoluer vers une nouvelle version d’addok, notre moteur de géocodage.

La mise en production de la version 1.0.0 est prévue pour le 2 mai

Fonctionnellement, il ne devrait pas y avoir de changement, mais nous souhaiterions avoir si possible votre retour.

Dans ce but, nous avons mis en place l’adresse devapi-adresse.data.gouv.fr (au lieu de api-adresse.data.gouv.fr) pour vous permettre d’effectuer des tests. Exemple: http://devapi-adresse.data.gouv.fr/search?q=39%20quai%20andre%20citroen

Nous vous remercions d’avance pour les anomalies liées au fonctionnement du géocodeur que vous signalerez sur https://github.com/addok/addok/issues

Nous avons par ailleurs retravaillé dernièrement les scripts de préparation des données destinées au géocodeur. Pour les anomalies concernant les données, merci de les signaler sur https://github.com/etalab/ban-data/issues

Si vous avez des questions, pensez à utiliser ce forum !

Bon tests !

PS: si vous avez déployé votre propre instance d’addok, le package python a été mis à jour, ainsi que la documentation sur https://addok.readthedocs.io/en/latest/

Bonjour,

Allez, je vais faire le pénible de service.

« L’API de géocodage (…) va prochainement évoluer » : avez-vous une date en tête ?

Quand vous dites « Fonctionnellement, il ne devrait pas y avoir de changement », c’est-à-dire que l’API est censée retourner exactement la même chose que la version en prod ? (si je demande c’est pour simplifier la procédure de tests)

Merciii

« Prochainement » c’est dans les semaines qui viennent, en fonction des retours.

L’API de géocodage doit fonctionner en principe de façon identique à l’actuelle, c’est plus sur les résultats retournés qu’il peut y avoir une différence, les algo ayant évolué.

Nous allons par contre ajouter de nouveau champs dans le JSON retourné, comme les coordonnées légales, les identifiants FANTOIR des voies et lieu-dit.

Bonsoir Christian,

Quelques premiers retours sur l’API candidate.

Nous avons soumis 1200 requêtes issues de données retournées par la PFLAU (annuaire inverse service d’urgence). Très peu d’écarts entre les deux versions (une dizaine significatifs).

  • Le mot « IMP » est mieux traité

Exemple q="numéro IMP nom_voie &citycode=CODE_INSEE

  1. avant : on obtient possiblement « impasse » et « allée »
  2. devapi : :+1: on obtient LA réponse ( numéro IMPASSE nom_voie )

C’est vrai également avec RES pour résidence

  • Un numéro de voie précédé de 0 est mieux traité

Exemple q=00012 RUE MARIE CURIE&citycode=76540&limit=5

  1. avant : on obtient « Rue Marie Curie » :-1:
  2. devapi : :+1: on obtient LA réponse ( « 12 Rue Marie Curie » )
  • Une réponse plus pertinente qu’avant !

Exemple q=39 ROUTE DES 2 VALLEES&citycode=76577&limit=5

Le double piège : la présence du « 2 » et une réponse qui est une rue et non une route !

  1. avant : :-1: la réponse n’est pas correcte car on obtient « 2 Rue des Deux Vallées »
  2. devapi : :+1: on obtient LA réponse ( 39 Rue des Deux Vallées 76590 Sainte-Foy" )

nota : on me souffle dans l’oreillette que le score de réponse est meilleure si on présente q=39 ROUTE DES VALLEES&citycode=76577&limit=5 (sans le 2) ; donc en réalité le 2 est expurgé que de la requête ?

Cependant, quelques configurations moins performantes :

  • La présence d’une virgule gène la nouvelle version.

Alors que la nouvelle version sait trimer les 0, elle n’envisage pas la suppression d’une virgule dans le critère

Ex: q=18, AVENUE DE VERSAILLES&citycode=76157&limit=5

  1. avant : :+1: on obtient « 18 Avenue de Versailles »
  2. devapi : :-1: on obtient seulement « Avenue de Versailles »

  • La présence de mots inutiles à l’adresse gène la nouvelle version.

Exemple mention indue Porte:0506 dans une requête de la forme q="numéro type_voie nom_voie Porte:0506&citycode=CODE_INSEE

  1. avant : on obtient la réponse espérée
  2. devapi : on obtient 0 réponse

  • La nouvelle API perd un peu la tête avec l’abrévation R pour RUE.

Exemple q=120 R RENARD&citycode=76540&limit=5

  1. avant : :ok_hand: on obtient la réponse espérée (120 RUE DU RENARD à ROUEN)
  2. devapi : :-1: on obtient 2 réponses de niveau voie; 1°/ le 120 est non traité :unamused: 2°/ réponses = « rue du renard » et « impasse du renard »

A noter que q=120 R DU RENARD&citycode=76540&limit=5 est :ok:
Egalement q=120 RU RENARD&citycode=76540&limit=5 est :ok:
Egalement q=120 DU RENARD&citycode=76540&limit=5 est :ok:

Curieusement q=120 DI RENARD&citycode=76540&limit=5 propose 2 réponses ! 1°/ le 120 RUE DU RENARD :ok_hand: et « impasse du renard » (où le 120 n’existe pas :hugging: !)

Dans le cas extrême on 1 réponse de niveau voie. Ex: q=45 R REPUBLIQUE&citycode=76758&limit=5 oublie le 45 et ne propose que « Rue de la République 76190 Yvetot » :-1: .

  • La nouvelle API perd un peu la tête avec certains noms de voie pouvant désigner un autre type d’objet (communes, région).

Exemple : q=10 RUE DE NORMANDIE&citycode=76575&limit=5

  1. avant : :ok_hand: on obtient une réponse
  2. devapi : :-1: on obtient 5 réponses dont certes la bonne en 1er, mais au passage on se voit proposer picardie; vienne, madrid ou Londres :laughing:

Autre exemple trouvé: q=2 RUE DE BRETAGNE&citycode=56063&limit=5 où la nouvelle version voit large !

  • tests à venir

Nous allons soumettre prochainement des requêtes issues « du détrompage » pratiqué à la prise d’appel 15; au lieu d’avoir des mots complets, on devrait présenter des débuts de mots (toujours avec un citycode)

PS : nous contacter pour les exemples anonymisés;
PPS : les vraies adresses ne correspondent pas à des appels reçus

2 J'aime

Merci Hugues!
Retours très intéressants comme d’hab :slight_smile:
On regarde ça lundi.
Je pense en faire un jeu de tests dans https://github.com/geocoders/geocoder-tester
Je te dirais ensuite comment l’alimenter si tu veux :slight_smile:

@SamuNormandie je veux bien l’exemple anonymisé par mail (yohan.boniface@data.gouv.fr), merci! :slight_smile:

Nouvelle version disponible, avec une nouvelle base rechargée hier soir.

La majorité des problèmes signalés semblent désormais OK.

Le nouvelles données contiennent pas mal de nouveautés liées en grand partie aux fusions de communes:

  • plusieurs citycode, pour permettre les recherches par filtre sur les communes fusionnées avec les anciens codes INSEE en plus de l’actuel
  • l’intégration des différents noms des anciennes communes dans le nom de voie pour permettre la recherche sur les anciens nom (ou les noms des communes déléguées)
  • le rapprochement des voies/lieu-dit avec les codes FANTOIR des communes déléguées si ils n’existent pas encore pour la commune nouvelle
  • l’ajout du X/Y légal en plus de la latitude/longitude

A tester sur: http://devapi-adresse.data.gouv.fr/

Bonjour,

Je n’ai pas fait de tests de régression suite à cette nouvelle version; au vu des écarts constaté ici entre v1 et v2, je pense que cela pourrait être pertinent car pour mémoire la première phase sur 1200 lignes montrait un écart fort limité.

Aujourd’hui mes tests donnent 17% d’écart sur la simple comparaison du nombre de réponses retournées, pour des requêtes avec citycode, un nombre égal ne signifiant pas des réponses égales !

Ici , j’ai fait des tests sur des critéres de recherche actuellement utilisés par les opérateurs en Centre 15; notre moteur interne de recherche est basé sur le début des mots quitte à mettre le début de plusieurs mots (en sautant éventuellement des mots), ce qui peut amener à des recherches « excessivement » courtes

Exemple il sait trouver la rue Brisout de Barneville à ROUEN (citycode=76540) en mentionnant BRI BAR , ce que Addok v1 comme v2 ne sait pas traiter.

Voici quelques exemples de régression v2 contre v1

Avec le citycode=76540, pour un maximum de 10 réponses, (avec des numéros de voies modifiés)

  • v1 : MONTRIBOU donne 10 réponses en v1 dont en 1er « Avenue du Mont Riboudet 76000 Rouen »
  • v2 ne fournit aucune réponse
  • v1 : 1 RUE DES FRAMBOISIERS donne 1 réponse « 1 Rue du Framboisier 76000 Rouen »
  • v2 : fournit 10 réponses mais aucune n’est la « rue du framboisier »; retirer « des » ne change rien !
  • v1 : « AEPENT » donne 1 réponse, « RUE DES ARPENTS »
  • v2 : ne fournit aucune réponse
  • v1 : « 1 ARIST » donne 1 réponse pertinente « 1 Avenue Aristide Briand 76000 Rouen »
  • v2 : fournit 10 réponses dont en première position la seule coïncidant
  • v1 : « 1 CLEM » donne 1 réponse pertinente « 1 Cours Clémenceau 76100 Rouen »
  • v2 : fournit 10 réponses dont en première position la seule coïncidant
    cependant qu’on a l’exemple inverse de comportement pour
  • v1 : « 1%20SEGU » donne 10 réponses en v1 dont « 1 Rue du Docteur Seguin »
  • v2 : donne seulement la 1ere réponse, seule pertinente au regard du critère

dans la recherche

  • v1 : « 1 RUE DSE URSULINES » propose la RUE et le PASSAGE sans fournir de point de voie dans le second !
  • v2 : propose à juste titre seulement le « 1 rue des Ursulines ».

dans une autre approche plus subtile

  • v1 : « 1 RUE EAU DE ROBEC » donne 2 réponses justifiées « 1 Rue Eau de Robec 76000 Rouen » et « 1 des Rue Petites Eaux de Robec 76000 Rouen »
  • v2 : donne seulement la 1ere réponse

Il y a des exemples courts où la v2 est plus ciblée à juste titre:

  • « 100 RUE CHAS » qui doit ramener 1 adresse (100 Rue Chasselièvre) ; addok v1 s’égare
  • « 1 RUE CHAS » ramène 2 adresses (1 Rue Chasselièvre, 1 Rue de la Chasse); addok v1 s’égare
  • « 100 RUE CHAS » qui doit ramener 1 adresse (100 Rue Chasselièvre) ; addok v1 s’égare
  • « 1 RUE PORE » ramène 1 adresse (1 Rue Poret de Blosseville); addok v1 propose aussi des voies avec « PORTES »
    cependant en ôtant un caractère on obtient un effet paradoxal avec la v2 :
  1. la v2 ne priorise pas les réponses où le point de voie demandé est présent (avec 1 RUE CHA, citycode=76540,limit=10)
  2. la v2 divague éventuellement sur le type de voie (réponse de la forme xx AVENUE CHAnnnnn)

Remarque : lorsqu’un critère vient cibler le périmètre géographique, je trouve très pertinent qu’on propose des voies satisfaisants le critère hors le numéro de voie car peut-être la BAN n’a pas la connaissance d’un tel numéro ; c’est d’autant plus pertinent qu’il existerait un numéro supérieur dans la voie (hors voies métriques :wink: ?)

etc…

Je peux proposer mon jeu d’essai …

API rechargée avec

  • dernières données
  • dernière version du code qui intègre un nouvel algo pour détecter le « bruit » dans les adresses à géocoder (cedex, porte, chez mme michu)

Bons tests et merci d’avance pour les retours !

Remplacer api-adresse.data.gouv.fr par devapi-adresse.data.gouv.fr exemple:
http://devapi-adresse.data.gouv.fr/search/?q=39+quai+andre+citroen

@cquest Bonjour, pourquoi l’API supporte le protocole non sécurisé http? La bonne pratique concernant la sécurité des API, surtout celles pouvant manipuler des données personnelles, est de répondre en https uniquement.
L’accès http de l’API devrait répondre une erreur* précisant que l’utilisation du https est obligatoire (et non faire une redirection 301/302, car cela masquerait aux développeurs leur erreur, et permettrait le transport non chiffré de données personnelles)

Effectivement l’API est accessible en HTTP et HTTPS.

Il nous semble que c’est à l’utilisateur de l’API (donc au développeur) de choisir en fonction de ses usages et besoins et du niveau de confidentialité des données transmises.

Si le développeur manipule des données personnelles, bien entendu qu’il doit les protéger. Si jamais par erreur il ne le faisait pas, le fait que vous activer http ne lui permet pas de se rendre compte de cette erreur.

Mais si le développeur manipule des données personnelles, cela signifie que vous aussi. Vous devriez vous-aussi prendre toute les précautions afin de les protéger.

Il est triste de voir une entité tel que la votre promouvoir de si mauvaises pratiques. La sécurité lors du développement devrait être la priorité, apparemment ce n’est pas la votre.

Bonjour,

Nous avons découvert que notre application n’est pas compatible (probablement parsing trop strict vis-à-vis des nouveaux champs).
La correction devrait être assez rapide.

A quelle date la Mise en Production est-elle prévue ?

Cordialement
Etienne

Pas encore de date fixe prévue. C’est actuellement une version rc3 qui est en test, la rc4 arrive.

Etonnant ce problème causé par les nouveaux champs, on reste bien dans du geojson et les champs de la version actuels sont en principes identiques dans la nouvelle.
Ce parsing est-il « fait main » ou via une librairie éprouvée ?

A propos de la rc4: elle devrait réduire grandement la mémoire nécessaire pour faire fonctionner une instance d’addok. C’est donc une amélioration côté serveur (pour ceux qui déploient leur propre instance), et en principe pas de changement pour les utilisateurs de l’API.

Bonjour,

C’est corrigé de notre côté.

On faisait ça sur Mulesoft. Le parser utilisé par Mule (version 3.6.4) est Jackson 1. Il avait deux problèmes :

  • Il n’aime pas les nouveaux champs.
  • Il se mélange entre les champs id et _id

On est passé à Jackson2 en Java, en utilisant son ObjectMapper. Il faut quand même le configurer avec la propriété FAIL_ON_UNKNOWN_PROPERTIES passée à false.

C’est Ok pour nous maintenant.

On surveillera quand même la date de MEP…
:slight_smile:

Etienne

Le champ _id est peut être à supprimer des résultats car ce n’est qu’un id interne à addok.

Cet id interne a permis d’économiser de la RAM car il est bien plus court que les id figurant dans les données. Comme tout l’index redis fait référence à ces id, l’économie de quelques octets multiplié des millions de fois a permis de gagner quelques Go.

Addok 0.5 avait besoin d’environ 24Go pour une base France
la 1.0rc3 tient tourne sur une machine à 16Go
la 1.0rc4 est limite de passer en dessous de 8Go… avec des perf identiques :slight_smile:

La version rc4 est déployée en test sur devapi-adresse.data.gouv.fr

Nous envisageons de basculer en prod le 15 avril.

Version 1.0.0 publiée et déployée sur devapi-adresse.data.gouv.fr.
Mise en prod sur api-adresse.data.gouv.fr prévue pour la semaine prochaine.

Merci d’avance pour vos éventuels retours si vous rencontrez des problèmes avec cette version 1.0.0…

La nouvelle version (1.0) est désormais en production…

Nous allons procéder à un changement de serveur dans les jours qui viennent, si possible durant le week-end prolongé qui est devant nous. La coupure devrait être minimale.

1 J'aime