Compter occurence de mot

Résolu/Fermé
jean - 8 juil. 2010 à 09:02
 jean - 9 juil. 2010 à 08:50
Bonjour,

comment faire pour compter le nombre d'occurence de tout les mots d'un fichier A. Sachant que la liste des mots est dans un fichier B sous forme d'une colonne ( un mot par ligne ) ?
Le fichier A ne fait pas plus de 100Ko mais je veux eventuellement réaliser cela sur plusieurs fichiers.
commande look (en utilisant la liste de mot comme un dictionnaire) ? grep ?

merci

4 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
8 juil. 2010 à 16:38
jp@MDK:~/tmpfs ssh$ cat foo.sh
#! /bin/sh

#set -xv

i=0
while read line
do
count=$(egrep -o "\b$line\b" fichA | wc -l)
i=$((i + count))
done < fichB

echo "Total : $i"

jp@MDK:~/tmpfs ssh$ ./foo.sh
Total : 12

jp@MDK:~/tmpfs ssh$

;-))
2
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
Modifié par lami20j le 9/07/2010 à 08:45
Salut,

Ben, je vois que tu as fais tout le boulot ;-)
0
jivef Messages postés 927 Date d'inscription mercredi 11 août 2004 Statut Membre Dernière intervention 12 novembre 2020 306
9 juil. 2010 à 03:58
Number one : Jipicy, the big boss.
0
tres tres fort
thanks
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
8 juil. 2010 à 11:07
Salut,

Et le fichier B a combien des mots.
Vu que c'est un mot par ligne alors affiche le résultat de
wc -l < B


Dans le fichier A, que doit-on considerer comme séparateur des mots? Tous caractère de punctuation?
D'une doit être traité comme un seul mot par exemple?
0
le fichier B a 600 mots.
J'essaie dans 2 boucles imbriquées une comparaison de chaque mot du fichier avec chaque mot de la liste
for word in $(cat $elem); do
		for ref in $(cat $chemin/refEN.txt); do
			if [ $ref == $word ]; then
				((occu += 1))
			fi
		done
	done
	((val = (occu * 100)/nbmottot))
	echo "pourcentage de mot en anglais $val"


mais sans succes, j'ai des bug, il prend word pour un paragraphe . Je suppose que cela vient du IFS mais je ne sais pas lequel je dois mettre pour avoir mot par mot dans la boucle
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
8 juil. 2010 à 15:14
Salut,

jp@MDK:~/tmpfs ssh$ cat fichA
Bonjour,

comment faire pour compter le nombre d'occurence de tout les mots d'un fichier A. Sachant que la liste des mots est dans un fichier B sous forme d'une colonne ( un mot par ligne ) ?
Le fichier A ne fait pas plus de 100Ko mais je veux eventuellement réaliser cela sur plusieurs fichiers.
commande look (en utilisant la liste de mot comme un dictionnaire) ? grep ?

merci

jp@MDK:~/tmpfs ssh$ cat fichB
du
de
pour
un
le
par
la

jp@MDK:~/tmpfs ssh$ while read line; do echo -e "$line = \c" && egrep -o "\b$line\b" fichA | wc -l; done < fichB
du = 0
de = 3
pour = 1
un = 4
le = 1
par = 1
la = 2

jp@MDK:~/tmpfs ssh$

;-))
0
merci pour ce bout de code.

Mon soucis, c'est que je veux compter le nombre total de mot de mon fichier qui sont compris dans la liste.

avec ton exemple, je voudrais avoir dans une variable, "valeur" par exemple ,le résultat "12" car 12 mots du fichier A sont dans la liste du fichier B

Cela me permet, pour que vous compreniez mieux, de tester si un fichier est en anglais ou pas. J'ai une liste des 600 mots les plus utilisés en anglais, et je décide d'un nombre minimal à partir duquel $valeur doit etre pour "considerer le texte en anglais".
0