Je veux trouver les mots les plus fréquents dans un fichier texte, en utilisant une liste de mots vides. J'ai déjà ce code :
tr -c '[:alnum:]' '[\n*]' < test.txt |
fgrep -v -w -f /usr/share/groff/current/eign |
sort | uniq -c | sort -nr | head -10 > test.txt
d'un ancien message
mais mon fichier contient quelque chose comme ceci :
240
21 ipsum
20 Lorem
11 Textes
9 Blindtexte
7 Text
5 F
5 Blindtext
4 Texte
4 Buchstaben
Le premier est juste un espace et dans le texte ce sont des signes de ponctuation (comme des points), mais je ne veux pas cela, alors que dois-je ajouter ?
Réponse acceptée :
Considérez ce fichier de test :
$ cat text.txt
this file has "many" words, some
with punctuation. some repeat,
many do not.
Pour obtenir un nombre de mots :
$ grep -oE '[[:alpha:]]+' text.txt | sort | uniq -c | sort -nr
2 some
2 many
1 words
1 with
1 this
1 repeat
1 punctuation
1 not
1 has
1 file
1 do
Comment ça marche
-
grep -oE '[[:alpha:]]+' text.txt
Cela renvoie tous les mots, moins les espaces ou la ponctuation, avec un mot par ligne.
-
sort
Cela trie les mots par ordre alphabétique.
-
uniq -c
Cela compte le nombre de fois que chaque mot apparaît. (Pour
uniq
pour fonctionner, son entrée doit être triée.) -
sort -nr
Cela trie la sortie numériquement afin que le mot le plus fréquent soit en haut.
Traitement des cas mixtes
Considérez ce fichier de test à casse mixte :
$ cat Text.txt
This file has "many" words, some
with punctuation. Some repeat,
many do not.
Si nous voulons compter some
et Some
identique :
$ grep -oE '[[:alpha:]]+' Text.txt | sort -f | uniq -ic | sort -nr
2 some
2 many
1 words
1 with
1 This
1 repeat
1 punctuation
1 not
1 has
1 file
1 do
Ici, nous avons ajouté le -f
option pour sort
pour qu'il ignore la casse et le -i
option pour uniq
de sorte qu'il ignorerait également la casse.
Excluant les mots vides
Supposons que nous voulions exclure ces mots vides du décompte :
$ cat stopwords
with
not
has
do
Donc, nous ajoutons grep -v
pour éliminer ces mots :
$ grep -oE '[[:alpha:]]+' Text.txt | grep -vwFf stopwords | sort -f | uniq -ic | sort -nr
2 some
2 many
1 words
1 This
1 repeat
1 punctuation
1 file