Compter occurence de mot

Résolu
jean -  
 jean -
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

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut,

      Ben, je vois que tu as fais tout le boulot ;-)
      0
    2. jivef Messages postés 1024 Statut Membre 306
       
      Number one : Jipicy, the big boss.
      0
    3. jean
       
      tres tres fort
      thanks
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  3. jean
     
    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
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
    1. jean
       
      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