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 confirmé
    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
    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 confirmé
    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
    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....
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  3. #3
    Membre confirmé
    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
    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 expérimenté
    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
    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 confirmé
    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
    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 confirmé
    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
    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 !!
    Rédacteur "éclectique" (XML, Cours PHP, Cours JavaScript, IRC, Web...)
    Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
    je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
    pensez à la balise [ code ] (bouton #) et au tag :resolu: (en bas)

  7. #7
    Membre confirmé
    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
    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 confirmé
    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
    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, 17h10
  2. [RegEx] Trouver tous les "/mot" dans une chaîne
    Par micatmidog dans le forum Langage
    Réponses: 7
    Dernier message: 31/03/2006, 12h07
  3. Suppression d'espaces dans une chaîne
    Par dafalri dans le forum Langage
    Réponses: 11
    Dernier message: 20/02/2006, 13h13
  4. Compter nombre de mots dans une chaîne.
    Par xVINCEx dans le forum C++
    Réponses: 22
    Dernier message: 24/11/2004, 13h33
  5. Comptage de mots dans une chaîne
    Par kikinou dans le forum Pascal
    Réponses: 10
    Dernier message: 01/01/2003, 02h27

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