Comment compter le nombre d'occurrences de chaque mot dans un fichier?


6

J'ai besoin d'un programme pour compter le nombre de mots avec le nombre d'occurrences de chaque mot dans un fichier.

(La plupart des exemples que j'ai trouvés ne comptent que le nombre total de mots.)


Dites-nous au moins quel système d'exploitation vous regardez.
Aléatoire

La plupart de quel code?
InnaM

J'utilise Ubuntu OS. cherche le nombre de chaque mot dans un fichier. par exemple, le critique comme The 29.
ArK

Réponses:


6

Le service en ligne gratuit Wordcounter classe les mots les plus fréquemment utilisés dans un corps de texte donné. Utilisez-le pour voir quels mots vous utilisez trop ou peut-être simplement pour trouver des mots-clés dans un document.


16

Si la ligne de commande (ou un script) convient, il existe un million d'options. Comme en utilisant Perl (pour Windows, vous devez installer ActivePerl ou Cygwin avec Perl):

perl -0777 -lape's/\s+/\n/g' FILENAME | sort | uniq -c | sort -nr

Explication :

  • perl -0777 Perl opère sur l’ensemble du fichier comme s’il s’agissait d’une seule ligne ("mode slurp").
  • 's/\s+/\n/g' change tous les espaces en nouvelles lignes, ainsi: la sortie de Perl est d’un mot par ligne.
  • La sortcommande trie les mots par ordre alphabétique.
  • La uniqcommande élimine les mots en double; avec l' -coption, il imprime également le nombre d'occurrences.
  • La deuxième sortcommande, avec l' -nroption, trie le fichier résultant numériquement par ordre décroissant.

Pourquoi Perl est-il nécessaire ici? Quel était le problème avec chat FILENAME | sed s / '' / \\ n / g?
Sirex

Parce que votre exemple ne trie ni ne donne le nombre d'occurrences du mot, contrairement à celui d'Arjan.
AndrewKS

2
@ Sirex, je suppose que vous avez raison: cela cat FILENAME | sed s/' '/\\n/g | sort | uniq -c | sort -nrpourrait donner les mêmes résultats.
Arjan

1
oui, j'impliquais que le reste du commandement serait toujours nécessaire. A bas les doublures en perl one! :)
Sirex

@Sirex, je ne suis pas un expert. Mais pourquoi est sedmeilleur que perl? (Et peut-être poster ceci comme réponse?)
Arjan

5

C'est très facile. Utilisez simplement la commande suivante:

sort file.txt | uniq -c | sort -r


Correct (bien que je suppose qu'il ait aussi sort -rbesoin du -ndrapeau), mais seulement si chaque mot est sur une seule ligne dans le fichier lui-même. En effet, la question n’est pas claire à ce sujet.
Arjan

2

A partir d'une ligne de commande Linux:

sed s/' '/\\n/g FILENAME | sort | uniq -c | sort -nr

Sur Mac OS X, qui utilise la version BSD de sed, le \nbesoin de magie :

sed 's/ /\'$'\n/g' FILENAME | sort | uniq -c | sort -nr 

Je pense que l'échange de pile a avalé une de mes barres obliques inverses. Essayez ça.
Sirex

Hmm, travaille pour moi!
Sirex

Ah, il se \npeut que le besoin d'un peu de magie sur un Mac: sed 's/ /\'$'\n/g' FILENAME | sort | uniq -c | sort -nrsemble faire l'affaire avec les BSD sedutilisés sous OS X.
Arjan

(Utiliser 4 espaces pour indenter le code rend la vie beaucoup plus facile!)
Arjan

2

Ligne de commande Linux (Ubuntu):

tr -cs "[:alpha:]" "[\n*]" < file1 | sort | uniq -c | sort -nr > file2

0

MS Office et OpenOffice disposent tous deux de cette fonctionnalité. Aller aux outils / compte de mots.


0

Si vous utilisiez Windows, vous pourriez utiliser le traitement de texte Atlantis . Il contient une foule de petites fonctionnalités et de petites touches, dont une pour mettre en lumière le surmenage des mots.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.