IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Suppression de mots dans une chaîne [Sources]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut Suppression de mots dans une chaîne
    Salut,

    Je bosse en ce moment sur un moteur de recherche de rues (style mappy.com & compagnie).
    J'ai écrit une fonction qui vire certains mots non pertinent de la chaine de recherche (rue, boulevard, etc...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function formatRue($str){
    	$str=str_replace("ROUTE FORESTIÈRE DE L'","",$str);
    	$str=str_replace("ROUTE FORESTIÈRE DE LA","",$str);
    	$str=str_replace("NOUVELLE ROUTE DE L'","",$str);
    	$str=str_replace("ROUTE FORESTIÈRE AUX","",$str);
    	$str=str_replace("ROUTE FORESTIÈRE DES","",$str);
    	$str=str_replace("ROUTE FORESTIÈRE AU","",$str);
             ... (Y'en a comme ça pendant ~300 lignes)
             return $str;
    }
    Mon problème c'est que certains remplacement agisse aussi sur la partie pertinente de la chaine de recherche.
    Ex: dans la fonction formatRue, on trouve la ligne $str=str_replace("PLAN","",$str);
    Et lorque je recherche: "bd des plants", ma chaine de recherche devien "ts" alors que je m'attend à "plants"
    Vous voyez le problème ? Comment faire pour éviter ceci ?

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str=str_replace(" PLAN "," ",$str);
    sinon, toune-toi vers les regexp....

  3. #3
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par Swoög
    peut-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str=str_replace(" PLAN "," ",$str);
    Le problème c'est que ces mot ne sont pas forcément en milieu de chaine (il faudra aussi gérer "PLAN " et " PLAN".
    sinon, toune-toi vers les regexp....
    J'ai tjs entendu dire que les expreg sont groumande en ressources et j'ai 567
    mots non pertrinents à virer...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 332
    Points
    332
    Par défaut
    En fait ça te vire toutes les endroits ou ya tes mots non pertinents, même si ça fait partie d'un mot ?

    Et là je sais pas si tu vas comprendre ce que je dis

    Mac.

  5. #5
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Si si je comprends
    C'est même exactement ce qui se passe et ce que je veux éviter.
    Ca rique pas de bouffer énormément de ressources sir je balances 567:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str=preg_replace("`(^|\W)(TRUC_A_VIRER)(\W|$)`si","\\\\3", $str);
    ???

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    au lieu de tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [".implode('|', $trucs_a_virer)."]
    comme ça ça te supprime tout d'un coup !!

  7. #7
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Bon, je vais tester avec les expreg, comme ça je serais au moins fixer sur ce qu'elles concomment réelllement

  8. #8
    Membre habitué
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2003
    Messages : 120
    Points : 126
    Points
    126
    Par défaut
    Bon et bien ça marche parfaitement bien comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function smallClean($str){
    	$str=strtoupper( trim($str) );
    	$str=preg_replace("`(^|\W)(BD)(\W|$)`si","\\1BOULEVARD\\3", $str); 
    	$str = preg_replace("`(^|\W)(ST)(\W|$)`si","\\1SAINT\\3", $str);
    	$str = preg_replace("`(^|\W)(STE)(\W|$)`si","\\1SAINTE\\3", $str);
    	$str = str_replace('/', ' SUR ', $str);
     
    	$str = str_replace("'", ' ', $str);
    	$str = preg_replace("`(^|\W)(À)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(A)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(D)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(L)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(AU)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(DE)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(DU)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(LE)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(LA)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(AUX)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(DES)(\W|$)`si","\\1\\3", $str);
    	$str = preg_replace("`(^|\W)(LES)(\W|$)`si","\\1\\3", $str);
    	return trim($str);
    }
     
    function formatRue($str){
     
    	$str = smallClean($str);
     
    	$str=preg_replace("`(^|\W)(ROUTE FORESTIÈRE|VOIRIE COMMUNALE|PETIT CHEMIN|CHEMIN RURAL|GRANDE ALLÉE| ... |PONT|PORT|QUAI|VOIE|ÎLE|RUE)(\W|$)`si","\\1\\3", $str);
     
    	return trim($str);
    }
    Voilà pour les éventuels intéressés.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Suppression d'un mot dans une chaîne de caratères
    Par Rayan1 dans le forum Access
    Réponses: 3
    Dernier message: 02/09/2014, 18h10
  2. [RegEx] Trouver tous les "/mot" dans une chaîne
    Par micatmidog dans le forum Langage
    Réponses: 7
    Dernier message: 31/03/2006, 13h07
  3. Suppression d'espaces dans une chaîne
    Par dafalri dans le forum Langage
    Réponses: 11
    Dernier message: 20/02/2006, 14h13
  4. Compter nombre de mots dans une chaîne.
    Par xVINCEx dans le forum C++
    Réponses: 22
    Dernier message: 24/11/2004, 14h33
  5. Comptage de mots dans une chaîne
    Par kikinou dans le forum Pascal
    Réponses: 10
    Dernier message: 01/01/2003, 03h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo