[awk] Petite énigme: fréquence d'occurrences

Fermé
awkgirl - 26 mars 2008 à 12:26
 Cyril - 12 janv. 2009 à 15:11
Bonjour,


je dispose d'un corpus constitué de 1000 alignements français et anglais.

Je dois faire une sélection d'alignements sur la base d'un mot simple (ou motif) suivi de sa categorie grammaticale, la fréquence minimale étant 50 occurrences.

Bon, j'ai parsé mon corpus avec treetagger, et maintenant je dispose de 1000 fichiers séparés contenant chacun un alignement, et je dispose toujours de mon corpus entier.

Faire la sélection d'alignements sur la base d'un mot simple avec catégorie grammaticale, je sais faire:

$ awk -F'\t' '$1 ~ /the$/ && $2 == "DT" \ ////// où the est le motif que je recherche et DT sa cat. gramm.
> { fname=FILENAME;
> sub(/.*_/, "", fname);
> sub(/.tag/, "", fname);
> sent=sprintf("%d", fname);
> print sent }' OO-enfr-E_ENFR_EN_al_????.tag | ////// où OO-enfr....tag est mon corpus parsé (1000 fichiers)
> while read sent;
> do
> awk -F'\t' -v s=$sent \
> 'NR == s { print "EN:" $2; print "FR:" $3 }' OO-enfr-E_ENFR_EN_al.txt ; ////// où OO-enfr....txt est mon corpus entier
> done



Mon problème est que je ne sais pas comment faire pour replacer mes fréquences d'occurrences dans chaque fichier séparé (ceux en .tag), vous me suivez?
si je n'avais pas à replacer la fréquence dans mes fichiers, je n'aurais qu'à ajouter:

#!/usr/bin/awk -f
#
#Word_Frequency.awk
#

{
while (getline < FILENAME > 0) {
col3[$3]++
# print "* "$3" = "col3[$3]
}
close (FILENAME)
while (getline < FILENAME > 0) {
print $0, col3[$3]
}
exit
}


Bon je suis désolée si tout cela vous paraît confus, en même temps ça l'est pour moi aussi!


Merci pour votre aide!!

PS: jipicy es-tu là ;-)

1 réponse

Si le problème consiste a substituer "frequence1" par "frequence2" dans un ensemble de texte, je pense que la commande sed constitue la solution à vos problème.
De plus la commande grep peut fournir le nombre d'occurrence i.e "fréquence2" d'un mot donné sur un corpus donné.
0