Compter le nombre de mots d'un texte ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Compter le nombre de mots d'un texte ?

par Henri » 13 juin 2006, 12:09

Attention, pour ce type de remplacements il faut utiliser la fonction strtr qui est bien plus performante que des expressions régulières dans des cas de remplacements de caractères :
$texte = strtr($texte, "çàâäéèêëîïôöùûü", "caaaeeeiioouuu");
Tout à fait. Sauf si on veut aussi transformer les caractères accentués majuscules qu'il faut alors se taper à la main dans la chaîne "çàä...ÄÂ..." car strtr n'a pas de version case insensitive. Mais rien de bien méchant ...

par naholyr » 13 juin 2006, 11:53

$texte = eregi_replace ("[àäâ]", "a", $texte);
$texte = eregi_replace ("ç", "c", $texte);
$texte = eregi_replace ("[éèêë]", "e", $texte);
$texte = eregi_replace ("[ïî]", "i", $texte);
$texte = eregi_replace ("[öô]", "o", $texte);
$texte = eregi_replace ("[üûù]", "u", $texte);
$texte = strtolower($texte);
Attention, pour ce type de remplacements il faut utiliser la fonction strtr qui est bien plus performante que des expressions régulières dans des cas de remplacements de caractères :
$texte = strtr($texte, "çàâäéèêëîïôöùûü", "caaaeeeiioouuu");

par Henri » 13 juin 2006, 11:50

En utilisant les fonctions régulières, tu peux transformer les lettres accentuées de ton texte (ou d'une copie de ton texte) en lettres non accentuées. Par exemple, la 1ère ligne indique qu'il faut remplacer tous les à, ä et â par a. Au final, on supprime toutes les majuscules.
$texte = eregi_replace ("[àäâ]", "a", $texte);
$texte = eregi_replace ("ç", "c", $texte);
$texte = eregi_replace ("[éèêë]", "e", $texte);
$texte = eregi_replace ("[ïî]", "i", $texte);
$texte = eregi_replace ("[öô]", "o", $texte);
$texte = eregi_replace ("[üûù]", "u", $texte);
$texte = strtolower($texte);
Note : Il y a peut-être une syntaxe plus compacte qui permet de tout faire en une seule instruction, mais je trouve que les expressions régulières ont vite tendance à devenir illisibles et donc inmodifiables (avis strictement personnel).

Après, tu n'as plus qu'à utiliser ton code foreach ...

PS : en PHP5, la fonction str_replace indique combien il y a eu de remplacements effectués.
En faisant
$dummmy = str_ireplace (array("a", "à", "ä", "â"), "", $texte, $count);
Tu dois pouvoir récupérer le nombre de remplacements dans $count, donc le nombre de a, à, ä, ... mais je ne l'ai pas testé.

par naholyr » 13 juin 2006, 11:44

EDIT J'ai trouvé !
Je procède de la manière suivante :
foreach (count_chars($texte, 1) as $i => $val) {
  if (chr($i) == "(a, à)" or chr($i) == "à"){
  print "Il y avait $val occurrence(s) de "" . chr($i) . "" dans la phrase.\n</br>";}
Le soucis, c'est que je n'arrive pas à regrouper le "a" et le "à"
Ne fais pas une boucle si seulement quelques valeurs du tableau t'intéressent.

Tu peux :
- utiliser 0 en second argument, afin de traiter tous les caractères (même s'il n'y a aucun "a" la clé "a" existera et aura pour valeur 0) et d'éviter les erreurs de clé non définie.
- faire la somme des occurences qui t'intéressent.
$occurrences = count_chars($texte, 0);
$nb_A = $occurrences[ord('a')] 
      + $occurrences[ord('à')]
      + $occurrences[ord('A')]
      + $occurrences[ord('À')];
On peut facilement généraliser à une fonction
function count_charslist($string, $chars) {
    $len = strlen($chars);
    $occ = count_chars($string, 0);
    $result = 0;
    for ($i=0; $i<$len; ++$i) {
        $result += $occ[ord($chars{$i})];
    }
    return $result;
}
$nb_A = count_charslist($texte, "aàAÀ");

par travisbarker » 13 juin 2006, 10:04

Ok merci ça marche nixckel !
Et pour compter le nombre de "e" par exemple ?
J'ai trouvé ça :
foreach (count_chars($texte, 1) as $i => $val) {
  print "Il y avait $val occurrence(s) de \"" . chr($i) . "\" dans la phrase.\n</br>";
}
mais je n'arrive pas à le "spécialiser pour un seul caractère...

EDIT J'ai trouvé !
Je procède de la manière suivante :
foreach (count_chars($texte, 1) as $i => $val) {
  if (chr($i) == "(a, à)" or chr($i) == "à"){
  print "Il y avait $val occurrence(s) de \"" . chr($i) . "\" dans la phrase.\n</br>";}
Le soucis, c'est que je n'arrive pas à regrouper le "a" et le "à"

par naholyr » 13 juin 2006, 09:52

Comme souvent en php, il y a LA fonction faite pour : str_word_count()

Compter le nombre de mots d'un texte ?

par travisbarker » 13 juin 2006, 09:11

Bonjour !
Je voudrais savoir quelle est la fonction à utiliser pour compter le nombre d'occurences d'un caractère dans une chaine (dans mon cas, l'éspace) pour pouvoir compter le nombre de mots dans un texte.
Merci d'avance !