Bonjour,
Je ne sais pas bien où poster ma question, j'espère que cette catégorie est la bonne, veuillez m'excuser si ça n'est pas le cas.
On m'a demandé d'étudier le sujet du geocodage, c'est à dire la recherche de la position (lati/longi) d'une adresse donnée, de manière textuelle.
Niveau sources de données, j'ai trouvé OpenStreetMap ainsi que GeoNames, le premier fournissant pas mal d'information sur les limites administratives ainsi que les routes, et le second, d'après ce que j'ai compris, sur les traductions (du genre Lille <=> Rijsel, Antwerpen <=> Anvers ou encore Barcelone <=> Barcelona).
Ensuite il a la formulation de l'adresse, en France, on dira [numero], [rue], [CP] [ville] (ex: 5, chemin des tulipes, 75000 Paris) tandis qu'en Belgique ou en Espagne, ce sera plutôt [rue], [numero] [CP] [ville] (ex : "Chemin des tulipes, 5, 1040 Etterbeek" ou encore "Calle Del Sol, 46, 28000 Madrid"). Aux USA, j'imagine que c'est encore différent.
Puis il y a les fautes de frappes à gérer, car souvent les adresses proviennent de saisies de secrétaires ou de particulier sur notre formulaire web, par exemple "5, chemin des Tulipes, 75000 Paris" au lieu de "5, chemin des Tulies, 75000 Paris". L'adresse erronée doit pouvoir revenir à l'adresse exacte, mais avec un "score" de par exemple 97% au lieu de 100%. On définira les coefficients (genre se tromper dans le nom d'une ville est plus important que dans le nom d'une rue, par exemple).
Et enfin les nombres, comme "12, rue du 11 Novembre" au lieu de "12, rue du Onze Novembre". Et puis j'imagine qu'il y encore 10.000 diableries auxquelles je n'ai pas encore pensé.
Enfin bref, l'objectif est de retrouver le point d'une adresse, en quelques millisecondes, comme le fait Google Maps.. J'ai fait des tests là dessus, et une formulation différente du pays, avec des fautes de frappes, ainsi que les traductions de nombre littéraux en chiffres et inversement, en très peu de temps, il arrive à me "corriger" et à trouver la bonne adresse finale.
Mais comment font-ils ?
Actuellement, j'ai pu importer les données d'adressage d'OpenStreetMap ainsi que les données de GeoNames (ciblées sur la France) dans une base de données PostgreSQL. En requête, j'utilise la fonction "levenstein" contenue dans l'extension "fuzzystrmatch" pour au moins pondérer les choses.
Mais c'est long, très très long à s'exécuter, sur une requête SQL via PostgreSQL, bref, inexploitable au quotidien.
J'ai donc questionné mon entourage, notamment des chercheurs que j'ai rencontré dans mon ancienne entreprise, spécialisés dans la R&D. Ils m'ont dit qu'il fallait engranger toutes les informations que je possédais dans un graph, et ensuite effectuer des calculs dessus.. Bon, à part savoir que je faisais fausse route, ça ne m'avançait pas trop.
J'ai donc essaye Nominatim ainsi que gisgraphy, mais l'un ne gère pas les fautes de frappes, l'autre ne prend pas en compte des numéros d'adresses, du coup l'un comme l'autre ne conviennent pas.
Est-ce que quelqu'un peut me donner des indications pour résoudre ce type d'exercice de manière à ce qu'il soit exploitable ?
En vous remerciant par avance![]()
Partager