Trouvé un mot dans une variable plus les premiers et derniers caractères

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par yule, 27 Août 2014.

  1. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    320
    J'aime reçus:
    9
    Bonjour,

    Avec ce bout de script ci-dessous, j'aimerais arriver à 4 choses

    1) ne prendre en considération dans la valeur $keyword, que le premier mot de plus de 4 lettres (donc ne pas tenir compte de "le, la , sa etc..)
    2) selon la position ou le terme est trouvée dans le texte.. affiche les 30 premiers caractères avant ce terme et les 20 suivants (selon $pos)
    3) devrait afficher ceci "avancée outils linguistiques le domaine google.ch est disponible" (en prenant que des mots entier dans la découpe...)
    4) si il n'y a pas 30 caractères avant ou 20 après, récupérer les 50 (30+20) avant ou après le keywords

    Code:
    <?php header('Content-type: text/html; charset=utf-8');
    
    $texte ="Google recherche images maps play youtube actualités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse * 
    recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions..";
    
    $keyword = "le+domaine+de+sa+vigne"; // devrait prendre en compte que "domaine"... les plus (+) viennent de ma recherche, les espaces sont remplacés par des +
    
    $termes = explode("+", $keyword);
    echo $termes[0] , "<BR>"; // le
    echo $termes[1] , "<BR>"; // domaine
    echo $termes[2] , "<BR>"; // de
    echo $termes[3] , "<BR>"; // sa
    echo $termes[4] , "<BR>"; // vigne
    echo $termes[5] , "<BR>"; // Rien
    echo $termes[6] , "<BR>"; // Rien
    
    // comment récupérer le premier termes d'au moins 4 caractères ? => domaine
    
    //Je cherche la position
    $pos = strpos($texte, $keyword);
    
    if ($pos === false) {
        echo "La chaîne '$keyword' ne se trouve pas dans la chaîne <br><br>'$texte'";
    } else {
        echo "La chaine '$keyword' a été trouvée dans la chaîne <br><br>'$texte'";
        echo " et débute à la position $pos"; // position 220
    	
    }
    
    ?>
    je dois travailler à mon avis avec strrpos et substr mais dans les exemples, j'ai pas trouvé mon bonheur.

    D'avance merci de m'éclairer
    Bonne après-midi
    Yule
     
  2. sushih69
    sushih69 Nouveau WRInaute
    Inscrit:
    10 Octobre 2013
    Messages:
    2
    J'aime reçus:
    0
    Bonjour,

    Pour effectuer votre recherche de mot, je vous suggère d'utiliser la fonction PREG_SPLIT et de découper votre variable selon les espaces entre les mots.
    avec une boucle, vous passez chaque mot ainsi trouvé et gardez le premier qui répond à vos critères.
    Avec STRIPOS, vous aurez la position du mot récupéré juste avant, donc vous saurez s'il y a 30 caractères avant. pour les 20 après, longueur total de la variable moins la position du mot et sa longueur.
    Enfin pour récupérer vos chaines de 30 et 20 caractères, la fonction SUBSTR est là pour ça.

    En espérant vous avoir aidé.

    Sushih69
     
  3. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    320
    J'aime reçus:
    9
    Bonjour,

    Merci ça m'aiguille et selon votre explication, ça l'air bien plausible.
    Je dois également tenir compte de mettre en surbrillance le terme recherché, donc ça fait trop d'inconnu pour mes connaissances en php. je vais mettre de coté ce choix sur mon moteur.. je pense qu'il faut que j'aille par étape pour développer ça
    et que je regarde comment faire point par point

    Merci
    Yule
     
  4. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    320
    J'aime reçus:
    9
    j'arrive pas lacher.. rire

    j'en suis à ce stade.... Le echo est pour que je comprenne ce qu'il s'affiche...

    Code:
    $texte ="Google recherche images maps play youtube actualités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse   
    recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions..";
    
    $keyword = "le+domaine+de+sa+vigne";
    
    //+ --- je récupère le premier mot avec 4 caractères minimum
    
    $termes = explode("+", $keyword);
     
    $terme_ok = null;
    foreach($termes as $terme) {
    
        if (strlen($terme) > 4) {
            $terme_ok = $terme;
            break;
        }
    }
    
    echo "$terme_ok<br><br>"; // $terme_ok est le premier mot de plus de 4 lettres
    
    //Je cherche la position de ce mot de 4 caractères minimum
    
    $pos = stripos($texte, $terme_ok); // insensible à la casse, sinon strpos
    if ($pos === false) {
        echo "Le terme '$terme_ok' ne se trouve pas dans la chaîne texte";
    } else {
        echo "Le terme '$terme_ok' a été trouvée dans la chaîne texte<br><br>";
        echo " Le terme '$terme_ok' débute à la position $pos <br><br>"; // position 220
    }
    
    // domaine
    // Le terme 'domaine' a été trouvée dans la chaîne texte
    // Le terme 'domaine' débute à la position 220
    
    

    Comment afficher les 30 caractères précédant ce terme "domaine" et les 20 suivants pour y afficher avec une découpe sur des mots entiers "avancée outils linguistiques le domaine google.ch est disponible"

    IMPORTANT: il faudrait également prendre en compte que s'il n'y pas de 30 caractères avant ou 20 après, qu'il prennent en plus du terme "domaine" les 50 caractères le précédant ou les 50 caractères suivant

    Code:
    $max=30;
    if(strlen($texte)>=$max){$texte=substr($texte,0,$max);
    $espace=strrpos($texte," ");
    $texte=substr($texte,0,$espace)."..."; }
    echo $texte;
    Il m'affiche ceci "Google recherche images maps..." . Je ne sais pas comment me positionner selon la valeur $pos pour couper au bon endroit...

    A+
    Yule
     
  5. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    320
    J'aime reçus:
    9
    Re,

    j'avance mais c'est de plus en plus misérable (malgré tout et pour pas relire tout le poste, je résume la situation)

    Ce qui fonctionne et qui à l'air optimum...

    Code:
    $texte ="Google recherche images maps play youtube actualités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse * 
    recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions..";
    
    $keyword = "le+domaine+de+sa+vigne";
    
    //+ --- je récupère le premier mot avec 4 caractères minimum
    
    $words    = array_filter(explode('+', $keyword), function($p) { return strlen($p) > 4; });
    $word     = reset($words);
    
    echo "$word<br><br>"; // $word est le premier mot de plus de 4 lettres => domaine
    
    //Je cherche la position de ce mot de 4 caractères minimum
    
    $pos = stripos($texte, $word); // insensible à la casse, sinon strpos
    if ($pos === false) {
        echo "Le terme '$word' ne se trouve pas dans la chaîne texte";
    } else {
        echo "Le terme '$word' a été trouvée dans la chaîne texte<br><br>";
        echo " Le terme '$word' débute à la position $pos <br><br>"; // position 220
    }
    
    // domaine
    // Le terme 'domaine' a été trouvée dans la chaîne texte
    // Le terme 'domaine' débute à la position 220
    Maintenant avec ce qui précède, je dois afficher les 170 caractères précédant ce $word "domaine" et les 170 suivants pour y afficher avec une découpe sur des mots entiers

    Le résultat espéré => gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions.

    IMPORTANT: il faudrait également prendre en compte que s'il n'y pas de 170 caractères avant ou 170 après $word et sa position ($pos), qu'il prennent en plus du $word "domaine" les 240 caractères le précédant ou les 240 caractères suivant

    J'arrive qu'à ça (pathétique..:oops:)


    Code:
    // afficher 170 caractère après $word
    $pos=$pos-1;
    $start = $pos;
    $length = 170;
    $result = substr ($texte, $start, $length);
    
    
    echo"$result <br><br>";
    //[color=#FF0000]domaine [/color]google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions
    
    
    // Afficher 170 caractères avant $word
    
    $decompte = strlen($word); //7
    $v=$length-$décompte; // 170-7 = 163
    $x2=$pos-$v-1;  //220-163-1 = 58 (nouvelle position..)
    $start = $x2; // 58
    $result2 = substr ($texte, $start, $length);
    echo"$result2 <br><br>";
    // ités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse recherche avancée outils linguistiques le
    
    echo"$result2$result <br><br>";
    //ités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse recherche avancée outils linguistiques le [color=#FF0000]domaine [/color]google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions 
    => ités gmail drive plus » historique web | paramètres | connexion × surfez encore plus vite installer google chrome suisse recherche avancée outils linguistiques le domaine google.ch est disponible en : deutsch english italiano rumantsch solutions publicitaires solutions

    Ça ne coupe pas proprement, ça ne prend pas en compte s'il y a assez de caractères avant et après $word et c'est surtout, pas du tout optimum arghhhhhh

    J'essaye mais ça va pas....

    A+
    Yule
     
  6. yule
    yule WRInaute occasionnel
    Inscrit:
    24 Juillet 2004
    Messages:
    320
    J'aime reçus:
    9
    Tout est ok maintenant...
     
Chargement...
Similar Threads - Trouvé mot variable Forum Date
Utilisation de Adwords pour trouver des mots clés Débuter en référencement 23 Août 2019
Votre technique pour trouver des mots-clés non concurrentiels? Débuter en référencement 5 Septembre 2017
Trouver la page mieux référencée avec un mot clé donné Débuter en référencement 9 Août 2017
Klear moteur de recherche pour trouver des influenceurs US Demandes d'avis et de conseils sur vos sites 20 Septembre 2016
comment trouver mots cles Google Analytics 1 Décembre 2013
Outil pour trouver les mots les plus recherchés sur Google et Bing Débuter en référencement 7 Janvier 2013
Comment trouver les mots clefs d'un concurrent? AdWords 27 Janvier 2012
Trouver les mots clés les plus pertinents Débuter en référencement 8 Février 2011
Trouver les mots entre une chaine de caractere Développement d'un site Web ou d'une appli mobile 4 Septembre 2010
Trouver le juste "dosage" pour la répétition de mots-clés Débuter en référencement 30 Juin 2010
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice