Pages: 1
- Sujet précédent - QGIS: selectionner valeur dans un champ par une suite de lettres ? - Sujet suivant
#1 Mon 07 August 2023 15:40
- bastiencarto
- Participant occasionnel
- Date d'inscription: 5 Nov 2020
- Messages: 11
QGIS: selectionner valeur dans un champ par une suite de lettres ?
Bonjour à tous,
Je cherche à créer une nouvelle colonne code postale en fonction d'un champ commune.
Seulement je veux extraire un maximum de données en évitant la casse.
Jusqu'à présent j'utilise les conditions regexp_match et CASE, cela donne:
CASE WHEN
regexp_match("adresse",'MANOSQUE')
THEN
'04100'
Cela permet si le champ adresse se compose comme suit : 'l'hypermarché à MANOSQUE rue droite' de m'extraire 'MANOQUE' et donc le code postale.
Seulement j'ai peur de passer à coté de beaucoup de données qui ne pourront être identifiées à cause des fautes d'orthographe.
Je voulais savoir si il y a une fonction ou une méthode qui ressemble à regexp_match et qui permet d'identifier le nombre de lettre qui doivent se suivre dans le champ ?
ex:
regexp_matchV2("adresse",'MANOSQUE',4) serait vrai si un champ contient plus de 4 lettres qui se suivent dans l'ordre de la valeur.
MANOHSKE -->4--> MANOhke-->vrai
MAINHOSQUE --> 4-->mainhOSQUE-->vrai (supérieur à 4)
MANOKSQUE --> 4-->MANOksque et manokSQUE -->vrai
MANIQANO--> faux car MAN ou ANO est inférieur à 4 lettres qui se suivent.
Je vous remercie par avance, Bastien
Hors ligne
#2 Mon 07 August 2023 17:27
- Robin B
- Participant occasionnel
- Lieu: Montpellier
- Date d'inscription: 31 Jul 2023
- Messages: 14
Re: QGIS: selectionner valeur dans un champ par une suite de lettres ?
Bonjour,
Pour répondre à votre besoin, vous pouvez créer une fonction personnalisée dans l'Éditeur de fonction de QGIS. Pour cela :
- Ouvrez la calculatrice de champs ;
- Cliquer sur l'onglet "Éditeur de fonction"
- Cliquer sur le symbole '+' en vert pour ajouter une nouvelle fonction et nommer la;
- Dans l'encart du haut; copier-coller le code suivant :
Code:
import re @qgsfunction(args='auto', group='Custom') def regexp_matchV2(word, reference, feature, parent): max_consecutive = 4 # Vous pouvez ajuster cette valeur si nécessaire for i in range(len(word) - max_consecutive + 1): substring = word[i:i + max_consecutive] if re.search(substring, reference): return True return False
- Cliquer sur "Enregistrer et charger les fonctions" (en bas à droite de l'encart) ;
- Retourner sur l'onglet "Expression" ;
- Vous trouverez la fonction 'regexp_matchV2()' dans le groupe "Custom" ;
- Enfin, dans votre CASE WHEN remplacer 'regexp_match()' par 'regexp_matchV2()'.
En espérant que cela vous soit utile,
Robin B
Hors ligne
#3 Mon 07 August 2023 21:50
- p.jeremie
- Participant assidu
- Lieu: Valence
- Date d'inscription: 10 Sep 2017
- Messages: 426
Re: QGIS: selectionner valeur dans un champ par une suite de lettres ?
Bonjour,
Je ne connais pas dans le détail votre besoin mais à la lecture de votre message j'ai l'impression que les fonctions de correspondance floue pourraient être utiles
https://docs.qgis.org/3.28/fr/docs/user … -functions
Hors ligne
#4 Tue 08 August 2023 14:44
- bastiencarto
- Participant occasionnel
- Date d'inscription: 5 Nov 2020
- Messages: 11
Re: QGIS: selectionner valeur dans un champ par une suite de lettres ?
Bonjour,
Merci Robin B pour ce code et l'explication étape par étape car je ne connaissais pas l'éditeur de fonction ! Il fonctionne parfaitement.
Merci aussi p.jeremie, pendant mes recherches je n'étais pas tombé sur les fonctions de correspondance floue mais j'arrive à ce résultat là :
Code:
CASE WHEN length(longest_common_substring( lower( "adresse"),'manosque'))>= 4 THEN '04100' END
Les résultats ne sont pas sur à 100% en fonction des valeurs de vos bases, mais cela suffit à faire un premier très gros tri !
Hors ligne
Pages: 1
- Sujet précédent - QGIS: selectionner valeur dans un champ par une suite de lettres ? - Sujet suivant