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.)

Arche
la source
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.

Arjan
la source
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.
Arjan
la source
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

skyf0rger
la source
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 
Sirex
la source
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
utilisateur199384
la source
0

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

buba
la source
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.

Andygrunt
la source