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 :

Générateur de keyword à partir d'un texte


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut Générateur de keyword à partir d'un texte
    Bonjour,

    Comme le titre l'indique je cherche à enlever la dernière virgule d'un implode.

    voici mon code :

    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
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    $chaine = strtr( $texte, '.,-;:!?/&"', ' ' );
    $tabTemp = explode( ' ', $chaine );
    strip_tags( $tabTemp );
    foreach( $tabTemp as $k => $v )
    {
      if( $v != NULL )
      {
        if( preg_match( '#(.*){1}(\')#', $v, $matches ) )
        {
          $v = substr( $v, 2 );
        }
        $tabChaine[] = $v;
      }
    }
    $word_counts = array();
    foreach( $tabChaine as $m )
    {
      if( !array_key_exists( $m, $word_counts ) ) $word_counts[$m] = 1;
      else $word_counts[$m]++;
    }
    arsort( $word_counts );
     
    $compteur = 0;
    $nbArt2Parse = 10;
    $result = array();
    foreach( $word_counts as $valeur => $k ) 
    {
      if( $valeur != NULL )
      {
        if( $compteur == $nbArt2Parse ) break;
        $valeur = $valeur . '|';
        $texts = explode( '|', $valeur );
        $comma_separated = implode( ',', $texts );
        echo $comma_separated;
        $compteur++;
      }
    }

    ce qui donne :

    et,si,ad,in,cum,vel,quod,atque,non,


    et donc il faudrait que je retire la dernière virgule après le dernier mot.

    Une idée ?

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $texts = explode( '|', $valeur );
    unset($texts[count($texts)-1]);
    $comma_separated = implode( ',', $texts );

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    ceci ne fonctionne pas car il enleve toutes les virgules ^^

  4. #4
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    Tu as une façon bizarre de faire, essaye 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
    $texte_sortie = '';
    foreach( $word_counts as $valeur => $k ) 
    {
      if( $valeur != NULL )
      {
        if( $compteur == $nbArt2Parse ) break;
        $texte_sortie .= $valeur . '|';
        $compteur++;
      }
    }
     
    $texts = explode( '|', $texte_sortie );
    unset($texts[count($texts)-1]);
    $comma_separated = implode( ',', $texts );
    echo $comma_separated;

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    peut être ^^ mais meme en fesant de ta façon sa ne fonctionne pas ^^


    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
     
     
    $chaine = strtr( $texte, '.,-;:!?/&"', ' ' );
    $tabTemp = explode( ' ', $chaine );
    strip_tags( $tabTemp );
    $matches = '';
    foreach( $tabTemp as $k => $v )
    {
      if( $v != NULL )
      {
        if( preg_match( '#(.*){1}(\')#', $v, $matches ) )
        {
           $v = substr( $v, 2 );
        }
        $tabChaine[] = $v;
      }
    }
    $word_counts = array();
    foreach( $tabChaine as $m )
    {
      if( !array_key_exists( $m, $word_counts ) ) $word_counts[$m] = 1;
      else $word_counts[$m]++;
    }
    arsort( $word_counts );
     
    $compteur = 0;
    $nbArt2Parse = 10;
    $texte_sortie = false;
    foreach( $word_counts as $valeur => $k ) 
    {
      if( $valeur != NULL )
      {
        if( $compteur == $nbArt2Parse ) break;
        $texte_sortie .= $valeur . '|';
        $compteur++;
      }
    }
     
    $texts = explode( '|', $texte_sortie );
    unset( $texts[count( $texts )-1] );
    $comma_separated = implode( ',', $texts );
     
    echo $comma_separated;
    j'obtien la même chose donc :

    et,si,ad,in,cum,vel,quod,atque,non,

  6. #6
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 564
    Points : 2 399
    Points
    2 399
    Par défaut
    tu pourrais afficher le contenu du $texte_sortie après le foreach ?

    de plus $texte_sortie ne dois pas être définie à false mais à ''

  7. #7
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    après le foreach sa donne ceci

    et|si|ad|in|cum|vel|quod|atque|non|

    pour la variable $texte_sortie sa revien au même quel soit false ou vide car elle retourne toujours rien sauf quand méttant false elle et définie, mais bref dans tous les cas meme en enlevant false et en mettant rien sa revien au même ^^


    si tu veut faire des test voici le texte qui est interprété donc sur la variable $texte


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    $texte = 'Omitto iuris dictionem in libera civitate contra leges senatusque consulta; caedes relinquo; libidines praetereo, quarum acerbissimum extat indicium et ad insignem memoriam turpitudinis et paene ad iustum odium imperii nostri, quod constat nobilissimas virgines se in puteos abiecisse et morte voluntaria necessariam turpitudinem depulisse. Nec haec idcirco omitto, quod non gravissima sint, sed quia nunc sine teste dico.
     
    Etenim si attendere diligenter, existimare vere de omni hac causa volueritis, sic constituetis, iudices, nec descensurum quemquam ad hanc accusationem fuisse, cui, utrum vellet, liceret, nec, cum descendisset, quicquam habiturum spei fuisse, nisi alicuius intolerabili libidine et nimis acerbo odio niteretur. Sed ego Atratino, humanissimo atque optimo adulescenti meo necessario, ignosco, qui habet excusationem vel pietatis vel necessitatis vel aetatis. Si voluit accusare, pietati tribuo, si iussus est, necessitati, si speravit aliquid, pueritiae. Ceteris non modo nihil ignoscendum, sed etiam acriter est resistendum.
     
    Itaque tum Scaevola cum in eam ipsam mentionem incidisset, exposuit nobis sermonem Laeli de amicitia habitum ab illo secum et cum altero genero, C. Fannio Marci filio, paucis diebus post mortem Africani. Eius disputationis sententias memoriae mandavi, quas hoc libro exposui arbitratu meo; quasi enim ipsos induxi loquentes, ne \'inquam\' et \'inquit\' saepius interponeretur, atque ut tamquam a praesentibus coram haberi sermo videretur.';

  8. #8
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Bonjour,
    Je ne suis pas sûr d'avoir compris ce que tu voulais faire,
    mais est-ce qu'en remplaçant ce qui suit le arsort( $word_counts );
    tu plaçais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $compteur = 0;
    $nbArt2Parse = 10;
    $texts = array();
    foreach( $word_counts as $valeur => $k ) 
    {
      if( $valeur != NULL )
      {
        if( $compteur == $nbArt2Parse ) break;
        $texts[] = $valeur;
        $compteur++;
      }
    }
    $comma_separated = implode( ',', $texts );
    echo $comma_separated;
    tu n'obtiendrais pas ce que tu cherches ?
    Fred

  9. #9
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    non idem ^^ enfaite je cherche à enlever la derniere virgule sur ma chaine car sa donne sa :

    et,si,ad,in,cum,vel,quod,atque,non,

    et je voudrait que sa donne ceci :

    et,si,ad,in,cum,vel,quod,atque,non

  10. #10
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Justement,
    as-tu essayé mon bout de code ?
    Fred

  11. #11
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Quel est le but de ce code ?
    Que doit devenir le contenu de la variable $texte ?

  12. #12
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    oui il ne fonctionne pas mais ceci enfaite et logique je vien de trouver la solution enfaite dans mon dernier foreach je rajouter a ma valeur un | après chaque mots ce qui donner ceci :

    et|si|ad|in|cum|vel|quod|atque|non|

    donc en utilisant mon explode en sortie de boucle il interpréter toujour mon | .

    Il fallait simplement que je mette un espace et ensuite à la sortie de boucle supprimé les espaces devant et derrière ma chaine.

    Voici mon code en fonction fonctionnel :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
     
    function keywords( $texte )
    {
    $chaine = strtr( $texte, '.,-;:!?/&"', ' ' );
    $tabTemp = explode( ' ', $chaine );
    strip_tags( $tabTemp );
    $matches = '';
    foreach( $tabTemp as $k => $v )
    {
      if( $v != NULL )
      {
        if( preg_match( '#(.*){1}(\')#', $v, $matches ) )
        {
          $v = substr( $v, 2 );
        }
        $tabChaine[] = $v;
      }
    }
    $word_counts = array();
    foreach( $tabChaine as $m )
    {
      if( !array_key_exists( $m, $word_counts ) ) $word_counts[$m] = 1;
      else $word_counts[$m]++;
    }
    arsort( $word_counts );
     
    $compteur = 0;
    $nbArt2Parse = 10;
    $texte_sortie = '';
    foreach( $word_counts as $valeur => $k ) 
    {
      if( $valeur != NULL )
      {
        if( $compteur == $nbArt2Parse ) break;
        $texte_sortie .= $valeur . ' ';
        $compteur++;
      }
    }
     
    $texte_sortie = trim( $texte_sortie );
    $texts = explode( ' ', $texte_sortie );
    unset( $texts[count( $texts )-1] );
    $comma_separated = implode( ',', $texts );
     
    return $comma_separated;
    }
     
    echo keywords( $texte );

    ce qui me donne ceci :

    et,si,ad,in,cum,vel,quod,atque,non



    enfaite cette fonction sert à chercher dans un texte les mots ayant la plus forte occurence et ensuite les assemble pour formé des keywords

    merci à tous

  13. #13
    Membre éclairé Avatar de micetf
    Homme Profil pro
    Professeur des Ecoles
    Inscrit en
    Mai 2009
    Messages
    557
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Professeur des Ecoles
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2009
    Messages : 557
    Points : 831
    Points
    831
    Par défaut
    Voici une proposition de fonction qui permettrait de générer une liste de n mots clés séparés par le caractère de son choix à partir d'un texte :
    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
    function motsCles($texte, $nbreMotsCles, $separateur)
    {
    	// Je nettoie le texte
    	strip_tags( $texte );
            $texteEpure = preg_replace( '#[^a-zA-Z]#',' ',$texte);
    	$texteEpure = preg_replace( '# {2,}#',' ',trim($texteEpure));
     
    	$tabMots = explode(' ',$texteEpure);
     
            // Je compte les occurences
    	$tabOccurences = array();
    	foreach( $tabMots as $mot ) {
    		$tabOccurences[$mot] = (!array_key_exists($mot,$tabOccurences)) ? 1 : $tabOccurences[$mot]+1;
    	}
     
            // Je récupère les mots les plus fréquents
    	arsort($tabOccurences);
     
    	$compteur = 0;
    	$tabMotsCles = array();
    	foreach($tabOccurences as $mot =>$qte)  {
    		if( $compteur == $nbreMotsCles ) break;
    		if( $mot != NULL ) {
    			$tabMotsCles[] = $mot;
    			$compteur++;
    	  }
    	}
    	return implode( $separateur, $tabMotsCles );
    }
    Fred

  14. #14
    Membre à l'essai
    Inscrit en
    Septembre 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 25
    Points : 16
    Points
    16
    Par défaut
    Ah oui plus propre ^^ merci bien

  15. #15
    Membre habitué
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2007
    Messages : 121
    Points : 136
    Points
    136
    Par défaut
    Si tu as $texte = 'et|si|ad|in|cum|vel|quod|atque|non|' et que tu ne veux pas récupérer la valeur vide à la fin... il te suffit de faire explode('|', $texte, -1) afin de ne pas prendre la dernière valeur.
    Je n'ai aps tout compris car pour moi, c'est un gros bazar sans rapport avec la question.
    "enlever une virgule à un implode()" ne semble concrètement ne rien vouloir dire.
    Un implode() concatène les valeurs données...

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

Discussions similaires

  1. VBA : Creation de table à partir de fichier texte
    Par titof90 dans le forum VBA Access
    Réponses: 2
    Dernier message: 12/03/2007, 10h34
  2. Creer une chaine a partir d'un texte formaté
    Par PorkyFighter dans le forum Réseau
    Réponses: 15
    Dernier message: 29/10/2006, 21h26
  3. [MySQL] Générateur d'interface à partir de table sql ?
    Par Pumpkins dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 14/11/2005, 12h13
  4. Réponses: 2
    Dernier message: 08/08/2005, 11h27
  5. Réponses: 6
    Dernier message: 02/06/2005, 12h44

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