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 :

Récupérer morceau de phrase qui contient le mot


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut Récupérer morceau de phrase qui contient le mot
    Bonjour,
    je suis en train de faire un moteur de recherche, qui cherche les contenus d'article de blog (Wordpress µ).
    J'affiche le titre de l'article mais j'aimerais afficher un extrait du texte (facile) mais essentiellement le texte "autour" du mot recherché (plus difficile).
    Un peu à la Google si c'est pas trop demander. Au pire, afficher juste une seule phrase d'extrait et pas forcément à chaque fois que le mot apparaît dans le contenu.

  2. #2
    Membre actif Avatar de chtipitou
    Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2006
    Messages : 175
    Points : 214
    Points
    214
    Par défaut
    avec strpos tu peux connaitre la position de l'occurence dans le texte source,
    a partir de la tu peux afficher le texte l'entourant en specifiant les positions
    42
    there is no place like 127.0.0.1
    Mangez des http://www.smarty.net avec vos PHP web s'il vous plait
    var_dump retourne les informations structurées d'une variable, y compris son type et sa valeur. Les tableaux et les objets sont explorés récursivement, avec des indentations, pour mettre en valeur leur structure.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    Ah j'avoue, ça peut-être une solution. Je vais l'essayer.

    Là j'étais limite partie pour explode chaque phrase (avec le caractère point) et vérifier sur chaque phrase si le mot apparaissait.

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 741
    Points
    11 741
    Par défaut
    Pour trouver la phrase contenant par exemple le mot shibboleth :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /(^|[.!?\r\n])\s*(.*?\bshibboleth\b.*?($|[.!?\r\n]))/i
    La phrase sera récupérée dans $2.

    • Une phrase commence par le début du texte, un point, un point d'exclamation ou d'interrogation, ou encore un saut de ligne ou de paragraphe, donc (^|[.!?\r\n])
    • Elle se termine par les mêmes ou la fin du texte, donc ($|[.!?\r\n]).
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  5. #5
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Points : 1 565
    Points
    1 565
    Par défaut
    Si tu utilise preg_match, tu as une option PREG_OFFSET_CAPTURE qui te renvoie la position de chaque chaine capturée ;o)

    http://fr2.php.net/fr/preg_match

    Une fois que tu as l'offset, tu peux récuperer les 100 caracteres avant, les 100 caracteres apres et découper selon les mots avec word_wrap par exemple pour éviter de couper un mot en deux.

    http://fr2.php.net/fr/word_wrap

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    J'ai essayé ce code là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $texte_entier = "Au beau milieu de sa lune de miel avec les italiens, la vraie nature de Berlusconi refait surface. Une nature dominee par interet personnel apres la strategie des sourires et de la respectabilite. Berlusconi est pret a tout. On doit attendre au pire, a moins que nous y soyons deja";
     
    preg_match_all("/(^|[.!?\r\n])\s*(.*?\bdeja\b.*?($|[.!?\r\n]))/i",$texte_entier,$tabs);
    // Affichage du tableau résultant
    foreach($tabs[0] as $tab) {
    	echo $tab."<br>";
    }
    En clair je recherche la phrase qui contient le mot "deja", mais il me sort toutes les phrases précédents ma phrase (en clair tout le texte quoi parce que c'est le dernier mot).

    Si je tape "entrée" à chaque fin de phrase, là il me sort bien ma phrase (avec un point+espace devant) :
    . On doit attendre au pire, a moins que nous y soyons deja

  7. #7
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 741
    Points
    11 741
    Par défaut
    et $tabs[2] ?
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 30
    Points : 25
    Points
    25
    Par défaut
    J'ai parcouru le tableau de long en large mais il me renvoie que 2 fois la même portion de phrase.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    for($i=0;$i<10;$i++) {
    	for($j=0;$j<10;$j++) {
    		echo "tab[".$i."][".$j."] -> ".$tabs[$i][$j]."<br />";
    	}
    }
    C'est bien preg_match_all() la fonction à utiliser ?

    Pour l'instant j'ai coder ça un peu comme un porc, mais ça me sort bien la phrase (par contre c'est pas optimisé) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $phrases = explode(".",$texte_entier);
    foreach($phrases as $txt) {
    	if(preg_match("/(^|[.!?\r\n])\s*(.*?\bdeja\b.*?($|[.!?\r\n]))/i",$txt)) {
    		echo $txt."<br />";
    	}
    }

  9. #9
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 741
    Points
    11 741
    Par défaut
    donc, il faut utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /(^|[.!?\r\n])\s*([^.!?\r\n]*?\bdeja\b[^.!?\r\n]*?($|[.!?\r\n]))/i
    et récupérer le $tabs[2]
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

Discussions similaires

  1. Script qui contient le mot de passe du root
    Par L'aigle de Carthage dans le forum Shell et commandes GNU
    Réponses: 19
    Dernier message: 02/12/2014, 11h37
  2. Réponses: 13
    Dernier message: 02/11/2011, 08h47
  3. trouver l'article qui contient un mot precis
    Par cyndhia dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 03/07/2008, 14h55
  4. [RegEx] Récupérer la ligne qui contient un mot
    Par waldoun dans le forum Langage
    Réponses: 3
    Dernier message: 16/06/2008, 09h16
  5. [MySQL] Afficher les entrées d'une table qui contient un mot précis
    Par anarchoi dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 02/05/2007, 21h15

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