Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/08/2011, 09h56   #1
Invité de passage
 
Inscription : juillet 2010
Messages : 18
Détails du profil
Informations forums :
Inscription : juillet 2010
Messages : 18
Points : 0
Points : 0
Par défaut Réduire les mots de façon cohérentes

Bonjour,
Pour la maintenance d'un site de petites annonces, je cherche à créer une fonction qui réduirait les mots inclus dans une annonce postée par l'internaute.

Exemple :
"neuf" -> "nf"
"3 chambres" -> "3 ch"
"pot d’échappement" -> "pot d'échap"

Merci pour votre soutien
amoric69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 10h46   #2
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 772
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 772
Points : 2 329
Points : 2 329
Bonjour,

C'est faisable avec une regex, mais ça va être long et compliqué au vu de tes mots
__________________
- Avant toute chose : lire le mode d'emploi du forum et ses règles.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h08   #3
Futur Membre du Club
 
Inscription : avril 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 18
Points : 15
Points : 15
bonjour tu peut créer un tableau avec les mots les plus courants a modifier

Code php :
1
2
3
 
$shortword['neuf']='nf';
...
ensuite tu stocke ton message dans un tableau et compare chaque mot de ton message

Code php :
1
2
3
4
5
 
for($i=0;$i<sizeof($message);$i++){        if(strstr(strtolower($message[$i]))==$shortword[$message[$i]]) 
     $message[$i]= $shortword[$arrayMessage[$i]];   
}
}

enfin
tu réécris, stocke ton message et l'affiche
Code php :
1
2
3
4
5
6
 
$messageResult="";
for($i=0;$i<sizeof($arrayMessage);$i++){      
    $messageResult=$messageResult.$arrayMessage[$i]." "; 
        }
echo  $messageResult;
Je n'est pas tester ce code mais il doit être proche du résultat que tu attend.
kets14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 11h46   #4
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Salut,

Citation:
Envoyé par FirePrawn Voir le message
Bonjour,

C'est faisable avec une regex, mais ça va être long et compliqué au vu de tes mots
Pourquoi donc ? les fonctions str_* semblent bien adaptées. Avec un str_replace par exemple ça donnerait:

Code :
1
2
3
4
5
 
$search = array( 'neuf', '3 chambres', 'teste' );
$replacement = array( 'nf', '3 ch', 'tst' );
 
$newString = str_replace( $search, $replacement, $texte );
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 17/08/2011, 12h01   #5
Futur Membre du Club
 
Inscription : avril 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 18
Points : 15
Points : 15
effectivement le str_replace est plus simple pour traiter une variable de type string. J'aurais du i penser.
C'est l'habitude de traiter les données issue de fichier csv et les paramètre post en tableau qui ont orienté ma reponse, mais pourquoi faire compliquer quand on peut faire simple
kets14 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 12h11   #6
Modératrice
 
Avatar de Celira
 
Femme
Développeuse PHP/Java
Inscription : avril 2007
Messages : 3 656
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 27
Localisation : France

Informations professionnelles :
Activité : Développeuse PHP/Java

Informations forums :
Inscription : avril 2007
Messages : 3 656
Points : 5 359
Points : 5 359
On peut utiliser les deux en plaçant les "traductions" dans un fichier txt, csv ou autre, en lisant le contenu de ce fichier et en utilisant str_replace ensuite.
__________________
Modératrice PHP
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)

Pour afficher votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur)
Celira est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 17/08/2011, 12h24   #7
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Citation:
Envoyé par Celira Voir le message
On peut utiliser les deux en plaçant les "traductions" dans un fichier txt, csv ou autre, en lisant le contenu de ce fichier et en utilisant str_replace ensuite.
+1
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 13h31   #8
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 772
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 772
Points : 2 329
Points : 2 329
Citation:
Envoyé par Thes32 Voir le message
Salut,



Pourquoi donc ? les fonctions str_* semblent bien adaptées. Avec un str_replace par exemple ça donnerait:

Code :
1
2
3
4
5
 
$search = array( 'neuf', '3 chambres', 'teste' );
$replacement = array( 'nf', '3 ch', 'tst' );
 
$newString = str_replace( $search, $replacement, $texte );
Une vieille habitude et j'ai précisé que c'était long et compliqué ( en comparaison d'une autre méthode )
__________________
- Avant toute chose : lire le mode d'emploi du forum et ses règles.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 14h02   #9
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Je rappelle au passage que la dernière fois que j'ai fait un test, les fonction str_* étaient au moins 100x plus rapides que les regexp.

Donc:
- Les régexp sont puissantes mais lourdes, lentes et réservées aux cas particuliers
- Pour trouver une sous-chaine dans une chaine, utiliser strpos
- Pour remplacer des mots ou ensemble de mots dans une chaine, utilisez str_replace
- Pour lire des informations dans du HTML utilisez DOMDocument ou SimpleXML
- Il est possible d'utiliser des chaines comme des tableaux à la mode C
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 14h07   #10
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Citation:
Envoyé par FirePrawn Voir le message
Une vieille habitude et j'ai précisé que c'était long et compliqué ( en comparaison d'une autre méthode )
Vieille habitude ?!? il y a rien de vieux dans tous cela. je ne vois rien de long ni de compliqué (même si je sais, la complexité est une notion extrêmement relative).

A mon avis tu ne sais pas quand et pourquoi on fait appel aux expressions régulières.

Citation:
Envoyé par Benjamin Delespierre
Donc:
- Les régexp sont puissantes mais lourdes, lentes et réservées aux cas particuliers
- Pour trouver une sous-chaine dans une chaine, utiliser strpos
- Pour remplacer des mots ou ensemble de mots dans une chaine, utilisez str_replace
- Pour lire des informations dans du HTML utilisez DOMDocument ou SimpleXML
- Il est possible d'utiliser des chaines comme des tableaux à la mode C
je ne peut qu'être d'accord avec toi .
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 14h23   #11
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 772
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 772
Points : 2 329
Points : 2 329
Citation:
Envoyé par Thes32 Voir le message
Vieille habitude ?!? il y a rien de vieux dans tous cela. je ne vois rien de long ni de compliqué (même si je sais, la complexité est une notion extrêmement relative).

A mon avis tu ne sais pas quand et pourquoi on fait appel aux expressions régulières.



je ne peut qu'être d'accord avec toi .
Sisi je sais très bien dans quel cas on peut les utiliser. Mais il est vrai que je ne suis très certainement pas au goût de tout ce qui se fait, n'ayant pas tout utilisé moi même
Bref débat clos, j'avais tort
__________________
- Avant toute chose : lire le mode d'emploi du forum et ses règles.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h49.


 
 
 
 
Partenaires

Hébergement Web