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

EDI, CMS, Outils, Scripts et API PHP Discussion :

compter le nombres d'occurence dans des chaines


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut compter le nombres d'occurence dans des chaines
    Bonjour à tous, je souhaite compter le nombre de fois qu'une chaine(mot) apparait dans une autre chaine(phrase).

    Aussi actuellement je procède comme ci-dessous :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $data = array("je suis un titre 1"," pourquoi pas ce soustitre 2","on peut en faire un troisieme");
    foreach($data as $value){
    		$split_titre	=	explode(' ', $value);
    		$array_titre	=	array_merge($array_titre, $split_titre);
    	}
    	//compte le nombres d'exemplaire de chaine
    	$occurence = array_count_values($array_titre);

    Le soucis est que le array_count_values ne prend pas en compte la "casse". Je veux dire par la que par exemple :

    Aujourd'hui et jour
    Ainsi il va me trouver jour x2 alors que le premier "jour" n'est pas du tout semble à "aujourd'hui" savez vous comment régler ce soucis ?

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Ce n'est pas une histoire de casse. La casse c'est majuscules-minuscules.

    Ce qu'il te faut c'est une regexp avec le séparateur \b. Ça veut dire word boundary, en français « limite de mots ». Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $regexp = '/\bjour\b/i';
    Utilise cette regexp avec la fonction preg_match_all.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    Meric pour ta réponse, je n'ai effectivement pas utilisé le bon therme

    Cependant je ne vois pas du tout comment exploiter array_count_values via la solution que tu m'indiques ci-dessus !

  4. #4
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    regarde le lien que Watilin a mis dans son message, ça s'utilise comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $texte = "Aujourd'hui n'est pas un jour comme les autres jours. Mais quand même un bon jour !";
     
    $motRegex = preg_quote("jour", "#");
    $expreg = "#\\b$motRegex\\b#";
    preg_match_all($expreg, $texte, $resultats);
     
    var_dump($resultats);

  5. #5
    Membre chevronné Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Par défaut
    Merci pour vos retours !

    j'en suis arrivé à ceci, une sacrée usine à gaz Pensez vous qu'il soit possible de l'optimiser ?

    Code php : 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
     
    $data = array("Voila une premiere phrase", "Puis une deuxieme phrase", "On peut en cosntruire une troisieme", "Testons avec une quatrieme", " Pourquoi pas une cinquieme");
     
    $array_titre	=	array();
    	$split_titre	=	array();
    	$texte	=	"";
    	foreach($data as $key => $value){
    		$split_titre	=	explode(' ', $value);
    		$array_titre	=	array_merge($array_titre, $split_titre);
    		foreach($split_titre as $element){
    			$texte	=	$texte." ".$element." ";
     
    		}	
    	}
    	foreach($array_titre as $value){
    		$motRegex = preg_quote($value, "#");
    		$expreg = "#\\b".$motRegex."\\b#";
    		preg_match_all($expreg, $texte, $resultats);
    		$nb_occurence = sizeof($resultats[0]);
     
    		if(isset($resultats[0][0])){
    			$mot_en_cours	=	$resultats[0][0];
    			echo $mot_en_cours." apparait : ".$nb_occurence."<BR />";		
    		}	
    	}

  6. #6
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 681
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 681
    Par défaut
    pour la 1re boucle qui cherche les mots, tu peux la remplacer par ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $texte = implode(" ", $data);
    $array_titre = explode(" ", $texte);

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

Discussions similaires

  1. Compter le nombre d'occurences d'une chaine dans un texte
    Par tim91700 dans le forum Débuter
    Réponses: 5
    Dernier message: 02/04/2011, 16h27
  2. Compter le nombre d'occurence dans un tableau
    Par titou250 dans le forum Excel
    Réponses: 2
    Dernier message: 08/01/2008, 16h25
  3. Compter le nombre d'occurence dans une chaine
    Par shirya dans le forum Langage
    Réponses: 2
    Dernier message: 16/10/2007, 20h39
  4. Compter le nombre de caractere dans une chaine
    Par jmjmjm dans le forum C++
    Réponses: 13
    Dernier message: 19/11/2006, 11h37
  5. Nombre d'occurence dans la chaine
    Par Anduriel dans le forum Requêtes
    Réponses: 5
    Dernier message: 27/08/2006, 17h02

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