Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#1 Thu 18 March 2021 11:05

Bouhuiii
Juste Inscrit !
Date d'inscription: 4 Jun 2015
Messages: 3

SQL aide méthodologie pour récupérer une information

Je vous souhaite le bonjour !

J'ai un problème de méthodologie sur PostgreSQL 9.4 ou 11 (apparemment j'aime doublonner l'information).
J'ai récupéré les données sur l'open data des permis de construire et à partir de la description des travaux, je dois en tirer des informations.
Et c'est la première fois que je tente ce genre d'exploitation et je ne sais pas vers quoi me renseigner en fait. Mon objectif premier serait de récupérer le nombre de logement pour le moment.
Prenons un exemple fictif d'un permis de construire dans un monde idéal: "Construction de 3 immeubles (36 logements créées) et changement de destination d'un local d'activité en logement (3 logements créées)"
Il y a alors 39 nouveaux logements et en utilisant PostgreSQL et mes connaissances actuelles, je ne vois pas comment arriver à extraire cette information.

Et ce que j'aimerais, ce sont des pistes de recherches, un bout d'idée, de concept, d'approche car je ne sais pas quoi taper sur google. Je pensais utiliser substr(), position(), une fonction pour valider si c'est un chiffre qui est extrait, mais c'est très flou dans ma tête et je me dis qu'il existe peut-être quelque chose de plus simple pour sélectionner un mot avant un autre.

Je vous remercie grandement par avance car je sens que je peux tourner en rond un long moment sur le sujet!!! smile

Hors ligne

 

#2 Thu 18 March 2021 11:38

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1549

Re: SQL aide méthodologie pour récupérer une information

Bonjour

Houla, de la recherche d'information dans un texte non structuré: bon courage ! smile
Ca peut devenir super complexe. Ca va dépendre de ce que vous rencontrez dans la description des permis.

Dans le cas que vous donnez, vous pouvez utiliser des expressions régulières, qui sont très puissantes pour parser un texte.
Ici, ca serait "chercher dans un texte tous les nombres présents avant le mot "logement" et en faire la somme.

Par exemple (mais bon je suis nul en regexp, alors je vous conseille un bon tuto là-dessus):

On chercher par regexp les nombres présents avant le mot 'logement'
on extrait ce nombre du tableau de résultat (nbre[1]), on le cast en int et on fait la somme par id de permis.

Code:

with permis as (
    select 1 as id, 'Construction de 3 immeubles (36 logements créés) et changement de destination d''un local d''activité en logement (3 logements créées)' as val
    UNION ALL
    select 2 as id, '(12 logements créés) et changement de destination commerce en logement (1 logement créé)' as val
), nbre_logement as (
    select id, regexp_matches(val, '([0-9]+) logement', 'gi') as nbre
    from permis
) select id, sum(nbre[1]::int) as sum_logements
from nbre_logement
group by id;

id    sum_logements
1    39
2    13

A raffiner ensuite en fonction des différentes facons qui expriment le nbre de logements dans le texte du permis.

Nicolas

Hors ligne

 

#3 Thu 18 March 2021 11:56

Bouhuiii
Juste Inscrit !
Date d'inscription: 4 Jun 2015
Messages: 3

Re: SQL aide méthodologie pour récupérer une information

Les expressions régulières alors! Merci

Mais je sais que j'ai vais rencontrer beaucoup de problème car chaque instructeur a sa façon d'écrire ... parfois assez personnelle. Mais qui ne tente rien ! et ça va être une belle découverte tout ça je sens car j'y connais rien en regexp smile

Et encore merci
Marie

Hors ligne

 

Pied de page des forums

Powered by FluxBB