Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Recherche d'adresse CEDEX #381

Closed
gdrouet opened this issue Jul 18, 2017 · 18 comments
Closed

Recherche d'adresse CEDEX #381

gdrouet opened this issue Jul 18, 2017 · 18 comments
Assignees
Milestone

Comments

@gdrouet
Copy link

gdrouet commented Jul 18, 2017

Il serait pratique de supporter la recherche d'adresses CEDEX qui respecte un format particulier.
J'imagine un plugin addok-cedex.
Est-ce que cela a été déjà envisagé ?

@yohanboniface
Copy link
Member

Est-ce que cela a été déjà envisagé ?

Pas par nous à ma connaissance.

Ça marcherait pas tout simplement avec un filter?

@gdrouet
Copy link
Author

gdrouet commented Jul 18, 2017

Qu'entends-tu par filter ? Dans une adresse CEDEX il n'y a pas de housenumber ni de postcode. On a à la place un code cedex ainsi qu'un numéro supplémentaire (arrondissement ou bureau de distribution selon wikipedia). On pourrait donc s'attendre à ce que la réponse soit différente.

Après par chance, on a une correspondance assez proche entre le type des deux champs manquants et ceux présents, on pourrait donc imaginer tout indexer dans addok avec le numéro supplémentaire en lieu et place du housenumber et le code cedex en tant que postcode. Les adresses devraient ensuite être retrouvées assez efficacement.

Qu'en penses-tu ?

@jbelien
Copy link
Contributor

jbelien commented Jul 18, 2017

Je pense que @yohanboniface parle du paramètre FILTER dans le fichier de configuration : http://addok.readthedocs.io/en/latest/config/

Et si je comprends bien ta question, cela devrait en effet aider :)

@gdrouet
Copy link
Author

gdrouet commented Jul 18, 2017

Je ne suis pas sûr de voir quelle utilité je pourrais trouvé dans un filter supplémentaire, auquel pensez-vous ?

Merci.

@jbelien
Copy link
Contributor

jbelien commented Jul 18, 2017

Si j'ai bien compris l'intérêt du paramètre FILTER, cela permet d'indexer un champs et de pouvoir ajouter ce champ dans la recherche.

Je pense également que les champs housenumber et postcode ne doivent pas obligatoirement être remplis.

@gdrouet
Copy link
Author

gdrouet commented Jul 18, 2017

Pour moi non, c'est plutôt FIELDS qui permet d'indexer le champ. FILTER permet de spécifier dans la requête une recherche sur un sous ensemble à partir d'une valeur spécifiée pour un des champs.

Du coup je ne vois pas trop l'utilité du FILTER, j'ai envie de faire une recherche fulltext qui me sortira des adresses qui sont CEDEX ou pas. Par contre du coup indexer des champs supplémentaires pour le code CEDEX et le numéro complémentaire me paraît intéressant. La grosse question que je me pose c'est la nécessité de faire des traitements supplémentaires pour la recherche sur ces champs, d'où la question sur l'utilité d'un plugin ou pas.

@yohanboniface
Copy link
Member

Un "filter" permet aussi d'indexer un champ, la différence étant que la "recherche" se fera sur une valeur entière plutôt que sur du full texte (donc pas de fuzzy, etc.).
Ce qui permet de filter ensuite sur la valeur du cedex, tout en laissant la possibilité de faire une recherche fulltext en complèment.
Après, j'ai pas souvenir que le cedex ait une valeur associée, mais peut-être j'ai raté un truc, ou bien tu parles de BP xxxx ?
Dans ce cas, ça permettrait de faire des requêtes du type "q=rue des lias&bp=xxxxx" qui va remonter seulement le ou les documents dont la BP vaut xxxxx

Ensuite, si ce que tu veux faire c'est automatiquement extraire d'une chaîne la valeur de BP ou CEDEX pour ensuite filtrer la recherche en fonction, là oui il faudra un plugin.

Pour te répondre plus précisément, donne-moi des exemples concrets d'adresses avec CEDEX et ou BP et les recherches que tu voudrais faire.

@gdrouet
Copy link
Author

gdrouet commented Jul 19, 2017

Merci pour les précisions.

On pourrait avoir les saisies suivantes :

MILANO POIDS LOURDS CONTROLES BP 130 83088 TOULON CEDEX 9
CES MONPLAISIR OLYMPE DE GOUGES   82017 MONTAUBAN CEDEX
CENTRE COMMUNAL D ACTION SOCIALE BP 210 56006 VANNES CEDEX
CPAM CENTRE 353   75730 PARIS CEDEX 15
ASSURANCE MALADIE BP 87 91265 JUVISY SUR ORGE CEDEX
UNAPEI   75876 PARIS CEDEX 18

Découpage :

  • Nom de l'entreprise
  • Code cedex (ou bien code postal)
  • BP + n° BP (optionel)
  • Ville (se termine par CEDEX)
  • Indicatif cedex (facultatif)

Le dernier est bien la valeur du CEDEX qui peut être un n° de distributeur ou d’arrondissement.
On peut aussi envisager la présence d'un libellé de voie avec numéro après le nom de l'entreprise.

@gdrouet
Copy link
Author

gdrouet commented Jul 28, 2017

@yohanboniface un retour ?

@yohanboniface
Copy link
Member

Dans tes données importées, tu as les infos cedex/bp?

@gdrouet
Copy link
Author

gdrouet commented Jul 29, 2017

Oui j'ai le code CEDEX et le n° BP dans des champs dédiés.

@yohanboniface
Copy link
Member

Alors, ce que je ferais:

  • ajouter deux entrées dans les FILTERS pour indexer le cedex et le BP
  • créer un endpoint spécifique (étendant addok.http.base.Search, via un plugin) qui extrait les valeurs de la chaîne de recherche et set les filters qui vont bien quand une valeur est trouvée

Je peux essayer de te faire un POC dans la semaine si ça te semble utile.

@gdrouet
Copy link
Author

gdrouet commented Jul 29, 2017

Oui ça serait très intéressant. Le endpoint spécifique serait à utiliser uniquement pour la recherche CEDEX ? Il faut donc fonctionnellement demander à l'utilisateur quel type d'adresse il souhaite rechercher ?

@cquest
Copy link
Member

cquest commented Feb 15, 2018

Les géocodages avec CEDEX devraient très nettement s'améliorer avec ce commit sur addok-france:

addok/addok-france@c2490d1#diff-fae749b0bacb725bc49873af6b0e6cf2R55

Le principe est simple, on remplace le CP du CEDEX par ses deux premiers chiffres:

83088 TOULON CEDEX -> 83 TOULON

Le 83088 est en effet du "bruit" car absent des données BAN. Par contre, on a bien dans le contexte le numéro de département ce qui va aider à retrouver l'adresse. De plus, dans ces cas, l'adresse est en général complète, avec le nom de commune.

Il y a aussi de nouveaux traitements pour supprimer un peu plus de BP, CS, TSA, CIDEX avec différentes variantes (B.P, B.P., BP N nnn, BP No nnn, BP N°nnn, etc).

@jdesboeufs
Copy link
Member

Et pour les quelques 92XXX PARIS LA DEFENSE CEDEX ?

@Laurent-Hervaud
Copy link

Le sujet des CEDEX est complexe. Un libellé CEDEX ne correspond pas forcément à un secteur géographiquement limité au contour d'une commune. En milieu rural un code/libellé CEDEX correspond en général à plusieurs dizaines de communes. (Ex : TROYES CEDEX recouvre 27 communes au total).
De plus certains libellés CEDEX ne désignent pas une commune administrative (ex PARIS LA DEFENCE CEDEX, LA PLAINE ST DENIS CEDEX, CERGY POINTOISE CEDEX, ...).
Une solution est de passer par un outils de RNVP pour transformer l'adresse postale CEDEX en adresse géographique.

@cquest
Copy link
Member

cquest commented Feb 16, 2018

Pour 92XXX PARIS LA DEFENSE CEDEX si il y a assez d'élément d'adresse dans le reste de la query, on peut les retrouver. La simplification ajoutée dans addok-france, va réduire le bruit créé par le code postal inconnu du référentiel.

Exemple avec la modif:

> TOKENIZE 41 RUE DU CAPITAINE GUYNEMER COURBEVOIE 92925 PARIS LA DEFENSE CEDEX
41 ru du kapitain guinemer kourbevoi 92 pari la defens
--------------------------------------------------------------------------------
> EXPLAIN 41 RUE DU CAPITAINE GUYNEMER COURBEVOIE 92925 PARIS LA DEFENSE CEDEX
[3.619] Taken tokens: [<Token defens>, <Token kourbevoi>, <Token guinemer>, <Token kapitain>, <Token 92>, <Token pari>]
[3.631] Common tokens: [<Token du>, <Token la>, <Token ru>]
[3.637] Housenumbers token: [<Token 41>]
[3.640] Not found tokens: []
[3.645] Filters: []
[3.653] ** ONLY_COMMONS_BUT_GEOHASH_TRY_AUTOCOMPLETE_COLLECTOR **
[3.659] ** NO_TOKENS_BUT_HOUSENUMBERS_AND_GEOHASH **
[3.664] ** NO_AVAILABLE_TOKENS_ABORT **
[3.668] ** ONLY_COMMONS **
[3.674] ** NO_MEANINGFUL_BUT_COMMON_TRY_AUTOCOMPLETE_COLLECTOR **
[3.679] ** ONLY_COMMONS_TRY_AUTOCOMPLETE_COLLECTOR **
[3.683] ** BUCKET_WITH_MEANINGFUL **
[3.699] New bucket with keys ['w|defens', 'w|kourbevoi', 'w|guinemer', 'w|kapitain', 'w|92', 'w|pari'] and limit 10
[3.924] 0 ids in bucket so far
[3.935] ** REDUCE_WITH_OTHER_COMMONS **
[3.947] ** ENSURE_GEOHASH_RESULTS_ARE_INCLUDED_IF_CENTER_IS_GIVEN **
[3.954] ** FUZZY_COLLECTOR **
[3.973] Fuzzy on. Trying with [<Token defens>, <Token kourbevoi>, <Token guinemer>, <Token kapitain>, <Token 92>, <Token pari>].
[3.991] Going fuzzy with kourbevoi and ['w|defens', 'w|guinemer', 'w|kapitain', 'w|92', 'w|pari', 'w|du', 'w|la', 'w|ru']
[6.608] Going fuzzy with guinemer and ['w|defens', 'w|kourbevoi', 'w|kapitain', 'w|92', 'w|pari', 'w|du', 'w|la', 'w|ru']
[9.160] Going fuzzy with kapitain and ['w|defens', 'w|kourbevoi', 'w|guinemer', 'w|92', 'w|pari', 'w|du', 'w|la', 'w|ru']
[11.68] Going fuzzy with defens and ['w|kourbevoi', 'w|guinemer', 'w|kapitain', 'w|92', 'w|pari', 'w|du', 'w|la', 'w|ru']
[13.68] Going fuzzy with pari and ['w|defens', 'w|kourbevoi', 'w|guinemer', 'w|kapitain', 'w|92', 'w|du', 'w|la', 'w|ru']
[15.16] Fuzzy on. Trying with [<Token kourbevoi>, <Token guinemer>, <Token kapitain>, <Token defens>, <Token pari>, <Token 92>].
[15.18] Going fuzzy with kourbevoi and ['w|defens', 'w|guinemer', 'w|kapitain', 'w|92', 'w|pari']
[17.87] Going fuzzy with guinemer and ['w|defens', 'w|kourbevoi', 'w|kapitain', 'w|92', 'w|pari']
[20.27] Going fuzzy with kapitain and ['w|defens', 'w|kourbevoi', 'w|guinemer', 'w|92', 'w|pari']
[22.67] Going fuzzy with defens and ['w|kourbevoi', 'w|guinemer', 'w|kapitain', 'w|92', 'w|pari']
[24.69] Going fuzzy with pari and ['w|defens', 'w|kourbevoi', 'w|guinemer', 'w|kapitain', 'w|92']
[26.20] ** AUTOCOMPLETE_MEANINGFUL_COLLECTOR **
[26.22] Autocompleting defens
[26.41] Found tokens to autocomplete set()
[26.43] ** EXTEND_RESULTS_REDUCING_TOKENS **
[26.44] Bucket dry. Trying to remove some tokens.
[26.46] Adding to bucket with keys ['w|defens', 'w|kourbevoi', 'w|guinemer', 'w|kapitain', 'w|pari']
[26.72] 0 ids in bucket so far
[26.74] Adding to bucket with keys ['w|defens', 'w|kourbevoi', 'w|guinemer', 'w|kapitain', 'w|92']
[26.96] 0 ids in bucket so far
[26.98] Adding to bucket with keys ['w|defens', 'w|kourbevoi', 'w|guinemer', 'w|92', 'w|pari']
[27.21] 0 ids in bucket so far
[27.23] Adding to bucket with keys ['w|defens', 'w|kourbevoi', 'w|kapitain', 'w|92', 'w|pari']
[27.46] 0 ids in bucket so far
[27.48] Adding to bucket with keys ['w|defens', 'w|guinemer', 'w|kapitain', 'w|92', 'w|pari']
[27.72] 0 ids in bucket so far
[27.74] Adding to bucket with keys ['w|kourbevoi', 'w|guinemer', 'w|kapitain', 'w|92', 'w|pari']
[28.03] 0 ids in bucket so far
[28.04] ** EXTEND_RESULTS_EXTRAPOLING_RELATIONS **
[31.45] Adding to bucket with keys ['w|pari', 'w|kapitain', 'w|guinemer', 'w|92']
[31.77] 0 ids in bucket so far
[31.79] Adding to bucket with keys ['w|kapitain', 'w|guinemer', 'w|kourbevoi', 'w|92']
[31.94] 1 ids in bucket so far
[31.95] Adding to bucket with keys ['w|pari', 'w|defens', 'w|92']
[32.09] 1 ids in bucket so far
[32.10] No relation extrapolated.
[32.11] Computing results
[32.11] Done getting results data
[33.06] Done computing results
41 Rue du Capitaine Guynemer 92400 Courbevoie (BMwxx | importance: 0.0205/0.1, str_distance: 0.507/1.0)
33.1 ms — 1 run(s) — 1 results

Avec #433 on augmente encore plus les chances de trouver ces adresses... (élimination de 2 mots signifiants absents de l'adresse de référence "défense" et "paris").

@cquest cquest self-assigned this Oct 28, 2019
@cquest cquest added this to the Next milestone Oct 28, 2019
@cquest
Copy link
Member

cquest commented Oct 29, 2019

Corrigé par cette PR addok/addok-france#8

@cquest cquest closed this as completed Nov 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants