Salut tout le monde
Est ce qu'il y a une méthode pour compter le nombre de mot dans un texte?
(le texte peut être avec n'importe quelle langue).
Merci beaucoup
-----
Salut tout le monde
Est ce qu'il y a une méthode pour compter le nombre de mot dans un texte?
(le texte peut être avec n'importe quelle langue).
Merci beaucoup
Heu, avec quel outil, quel logiciel ?
Une méthode simple valable avec les langages standards (php, perl etc.) consiste à mesurer la longueur du texte, puis retirer tous les espaces (caractère ASCII 32) et mesurer la nouvelle longueur. Le nombre d'espaces correspond plus ou moins au nombre de mots moins un.
Bonjour,
Supprimer les espaces est très loin de suffire : ponctuation, données numériques ...
Bonsoir,
Le mieux est d'utiliser la fonction split, qui existe dans beaucoup de langages, en spécifiant plusieurs séparateurs, et ensuite tu utilises la fonction (ou méthode) Count qui renvoie le nombre de mots.
Existent en VB, Java, Python, etc.
Bonne soirée.
PS: Non! VB n'a rien a voir avec Vbulletin, c'est complètement c** ces info-bulles!!
Dernière modification par CM63 ; 16/02/2014 à 20h52.
Quoi? Quelque chose que je ne connais pas et qui me fait l'affront d'exister?!
Merci pour vos réponses
J'ai besoin d'une méthode simple.
Est ce que vous connaisez une méthode avec DOS ou WORD ou MATLAB??
Cela fait longtemps que je n'ai plus Word mais il y a quelque part dans un menu une option qui donne les statistiques sur le document avec bien entendu le nombre de mots.
Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
Bonsoir,
Avec Word, sous VBA, tu utilises Split et Count, comme je te l'ai dit. Il faut vérifier que Split existe sous VBA, mais je crois que oui, je ne peux pas faire l'essai car je n'ai plus le pack Office. Mais il faut fair quelque chose comme cela:
a="Ceci est une phrase, avec des virgules, des points, et des blancs. Et voila." .
S'il n'y a pas moyen de spécifier plusieurs séparateurs dans la fonction Split, il faut commencer par remplacer les virgules et les points par des blancs, par exemple :
b =Replace(a,","," ")
c =Replace(b,"."," ")
Et ensuite, tu fais:
Mots=Split(c," ")
Mots sera un tableau de string dont tu peux obtenir le nombre de mots : Mots.Count .
Il faut peut-être aussi supprimer les mots vides, apparus du fait que les virgules et les points sont suivis d'un blanc.
Bonne soirée
Quoi? Quelque chose que je ne connais pas et qui me fait l'affront d'exister?!
Pourquoi faire simple quand on peut faire compliqué ?
Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
Bonjour tout le monde,
Malheureusement, voici comment Word compte les mots dans son outil statistique :
- les caractères de ponctuation "!" ":" ";" "?" comportant un point et un autre caractère comptent pour un mot, car ils doivent être précédés et suivis d'un espace
- les tirets, guillemets et parenthèses comptent pour un mot, car ils doivent être précédés et suivis d'un espace
- les caractères de ponctuation "," "." et les points de suspension "..." ne comptent pas, car ils ne doivent pas être précédés d'un espace
- les apostrophes ne comptent pas : "qu'un" ne compte que pour un mot
Voici ce que cela donne sur un célèbre texte de Daudet (99 mots) :
Donc je partage l'avis de CM63 et ne vois pas de solution sérieuse en dehors d'un bonne macro qui va pouvoir éclater le texte sous la forme d'un tableau puis purger le tableau des mots indésirables (signes ponctuation précédés d'un espace insécable, articles, par exemple, etc.).
C'est un pb qui est tout sauf simple et qu'on ne peut pas contourner lorsqu'on veut se fabriquer une moulinette pour établir la liste des mots clés d'un texte.
En effet. Et ça confirme mes craintes exprimées quand on avait demandé notre avis sur l'introduction de cette fonction sur le forum : on se retrouve souvent avec des liens sans intérêt ou sans rapport avec la signification voulue.
Bonjour,
Voir la commande wc sous n'importe quel système unix (linux aussi, donc) : http://pwet.fr/man/linux/commandes/wc
(wc = word count, et pas autre chose ).
@+
Not only is it not right, it's not even wrong!
Bonjour,
Je partage ton avis. En revanche, ce serait bien qu'on puisse mettre des info-bulles personnalisées dans nos posts.
Bonne journée.
Quoi? Quelque chose que je ne connais pas et qui me fait l'affront d'exister?!
Je viens de vérifier dans LibreOffice : même principe de comptage que pour Word.
Rien ne sert de penser, il faut réfléchir avant - Pierre Dac
Bonjour
Voilà un bout de code écrit en C que j'ai utilisé pour compter les mots, et qui fonctionne pour les textes codés Unicode écrit avec les caractères latins.
Les caractères de ponctuation, tirets, guillemets et parenthèses ne comptent pas pour un mot. Les apostrophes et les traits d'union sont pris en compte : « qu'un » compte pour deux mots, « coupe-choux » également.
Il pourrait être étendu pour tenir compte d'autres langues (comme par exemple celles s'écrivant en cyrillique) ou modifié pour appliquer des règles de comptage différentes.
Pour ceux qui veulent le tester, voici son équivalent en Javascript.Code:// Compte le nombre de mots // caractères Unicode latin étendu int nombreMots(short *strUnicode) { short c; int compte = 0; for (;;) { do { c = *strUnicode++; if (c==0) return compte; } while ( c<0x41 || c>0x5A && c<0x61 || c>0x7A && c<0xc0 || c>0x2AF || c==0xD7 || c==0xF7 ); compte++; do { c = *strUnicode++; if (c==0) return compte; } while ( c>=0x41 && c<=0x5A || c>=0x61 && c<=0x7A || c>=0xc0 && c<=0x2AF && c!=0xD7 && c!=0xF7 ); } return 0; }
Il suffit de copier-coller le code suivant dans un éditeur de texte (type bloc-note) et de l'enregistrer en texte brut dans un fichier HTML (extension « .html ») pour pouvoir l'exécuter avec son navigateur web.
Code HTML:<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Compter les mots</title> <script> //<!-- function nombreMots(strUnicode) { var c; var compte = 0; var imax = strUnicode.length; var i = 0; for (;;) { do { if (i==imax) return compte; c = strUnicode.charCodeAt(i++); } while ( c<0x41 || c>0x5A && c<0x61 || c>0x7A && c<0xc0 || c>0x2AF || c==0xD7 || c==0xF7 ); compte++; do { if (i==imax) return compte; c = strUnicode.charCodeAt(i++); } while ( c>=0x41 && c<=0x5A || c>=0x61 && c<=0x7A || c>=0xc0 && c<=0x2AF && c!=0xD7 && c!=0xF7 ); } } function compter() { document.getElementById("compte").value = nombreMots(document.getElementById("texte").value); } //--> </script> </head> <body> <textarea id="texte" cols="80" rows="10" autofocus=""></textarea><br/> <input type="button" onclick="compter();" value="Compter"> <input type="text" id="compte" size="4"> mots </body> </html>
Très bon boulot Pa5cal. J'ai testé le Javascript et tombe à 99,99% d'accord avec votre algo.
Le poil de mouche vient des tirets. Je ne considèrerais pas le mot "sous-préfet" comptant pour deux mots, bien qu'il en compte deux, et m'en explique : le problème des tirets de césure en fin de phrase est d'une épouvantable complexité en typographie (césures automatiques, conditionnelles, etc.). Il y a aussi la césure "virtuelle" (Unicode) et, cerise sur le gâteau, sous Word on a en plus le "tiret insécable" (Ctrl+Maj+tiret du 6). Si la justification impose de couper un mot en fin de ligne, par exemple le mot "céré-
monie", vous allez compter deux mots pour un. Donc autant laisser tomber les tirets. Naturellement, ce n'est que mon point de vue.
Mais un grand bravo pour tout le reste, car le problème était loin d'être simple.
Une solution occupant une vingtaine de lignes de code ne peut bien évidemment pas résoudre un problème dont la complexité est souvent très sous-estimée. C'est d'ailleurs la raison pour laquelle j'évoquais la possibilité de le modifier pour prendre d'autre règles de comptage en considération.
J'ai sous le coude d'autres solutions bien plus poussées, mais qui requièrent l'usage d'un dictionnaire lié à la langue (contrairement à ce que demandais merins) ou qui imposent que le texte soit conforme à certaines règles typographiques.
Pour info, si l'on souhaite juste compter pour un seul mot tous les termes composés contenant un tiret (caractère 2Dh), il suffit d'ajouter au code les expressions suivantes :Code:} while ( c!=0x2D && c<0x41 || c>0x5A && c<0x61 || c>0x7A && c<0xc0 || c>0x2AF || c==0xD7 || c==0xF7 );On pourrait également tenir compte de la même manière des autres codes représentant un tiret (2013h, 2212h, FE63h, FF0Dh ...).Code:} while ( c==0x2D || c>=0x41 && c<=0x5A || c>=0x61 && c<=0x7A || c>=0xc0 && c<=0x2AF && c!=0xD7 && c!=0xF7 );
Mais il se pose également le problème du codage des caractères, car tous les logiciels ne traitent pas forcément les textes sous leur forme Unicode.
En effet, on trouve encore beaucoup de cas où ce codage est réalisé sur un seul octet (ASCII, ISO-8859-x, Mac OS Roman, ...) ou sur une séquence de longueur variable d'octets (HTML, UTF-8, ...).
S'assurer que les codes correspondent bien aux caractères typographiques auxquels on pense est déjà une étape qu'il n'est pas évident de franchir.