#26 Le 15/08/2012, à 16:22
- no_spleen
Re : [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs
Argh, en effet. J'avais oublié que les indices en awk sont toujours des strings. Donc 11 < 2.
On peux régler le problème en rajoutant un "z" devant la taille du mot si celui-ci fait plus de 9 lettres (je poste qu'il n'y a pas de mots de plus de 99 lettres...)
{
for (i=1;i<=NF;i++)
{
longueur = (length(length($i))>1)?"z" length($i):length($i)
if (!(longueur in taille))
{
taille[longueur]=$i
place[$i]=i
}
}
n = asorti(taille,n_ordre)
for (i=0;i<nb_max;i++)
{
word = taille[n_ordre[n-i]]
unsorted[place[word]]=word
}
m = asorti(unsorted,m_ordre)
sorted = ""
for (i=1;i<=m;i++)
sorted=(i==1)?unsorted[m_ordre[i]]:sorted"_"unsorted[m_ordre[i]];
print sorted
delete taille
delete place
delete n_ordre
delete m_ordre
delete unsorted
}
Hors ligne
#27 Le 15/08/2012, à 17:07
- pingouinux
Re : [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs
@ no_spleen #26 :
Allez, encore un petit effort…:P
$ gawk -f split_titles.awk1 -v nb_max=5 <<<"ceci est une phrase à tester pour voir la performance en temps"
ceci_performance_temps_est_phrase
Hors ligne
#28 Le 15/08/2012, à 17:55
- no_spleen
Re : [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs
pingouinux, tu es doué pour appuyer la où cela fait mal ;-)
Je suis curieux de savoir où se situe awk par rapport au shell ou au python au niveau performance.
{
for (i=1;i<=NF;i++)
{
longueur = (length(length($i))>1)?"z" length($i):length($i)
emplacement = (length(i)>1)?"z"i:i
if (!(longueur in taille))
{
taille[longueur]=$i
place[$i]=emplacement
}
}
n = asorti(taille,n_ordre)
for (i=0;i<nb_max;i++)
{
word = taille[n_ordre[n-i]]
unsorted[place[word]]=word
}
m = asorti(unsorted,m_ordre)
sorted = ""
for (i=1;i<=m;i++)
sorted=(i==1)?unsorted[m_ordre[i]]:sorted"_"unsorted[m_ordre[i]];
print sorted
delete taille
delete place
delete n_ordre
delete m_ordre
delete unsorted
}
Hors ligne
#29 Le 15/08/2012, à 18:09
- grim7reaper
Re : [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs
Bien meilleur que Bash (sans surprise, après tout awk est spécialisé dans ce genre de traitement), mais plus lent que Python :
$ time ./pingouinux.sh TEST 3 > /dev/null
real 1m43.276s
user 0m32.158s
sys 0m9.273s
$ time gawk -f no_spleen.awk -v nb_max=3 TEST > /dev/null
real 0m0.285s
user 0m0.280s
sys 0m0.004s
$ time ./pingouinux.py TEST 3 > /dev/null
real 0m0.145s
user 0m0.140s
sys 0m0.008s
Hors ligne
#30 Le 15/08/2012, à 18:27
- pingouinux
Re : [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs
@ no_spleen #28 :
Les mots sont maintenant dans l'ordre, mais ce ne sont pas que les plus longs qui sont choisis.
$ gawk -f split_titles.awk2 -v nb_max=5 <<<"ceci est une phrase à tester pour voir la performance en temps"
ceci_est_phrase_performance_temps
On devrait obtenir :
ceci phrase tester performance temps
Les performances sont excellents (à comparer aux résultats que je donne en #8).
Traitement global du fichier de 16384 lignes
$ time gawk -f split_titles.awk2 -v nb_max=5 <i >jawk
real 0m0.598s
user 0m0.590s
sys 0m0.000s
Traitement ligne par ligne du même fichier
$ time while read lig ; do gawk -f split_titles.awk2 -v nb_max=5 <<<"$lig"; done <i >jawkboucle
real 1m19.863s
user 0m0.950s
sys 0m4.150s
Hors ligne
#31 Le 15/08/2012, à 18:34
- no_spleen
Re : [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs
@pinguinux
La règle était que si plusieurs mots ont la même taille, on prend le premier. Ici phrase à la même taille que tester.
Hors ligne
#32 Le 15/08/2012, à 19:00
- thurston
Re : [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs
Bon, j'ose et je me permets.
Le 1er script me permet de choisir les bons mots d'une phrase. Mon display est trop petit malgré tout, et il faut compacter les mots trouvés.
Si le coeur vous en dit, ca se trouve ici, et c'est du coup la partie 2 de la reduction drastique d'une phase à quelques caractères, en reconnaissant toujours la phrase initiale si connue!!!
(utilité? > mp3 player low display)
Ici donc
post
En tous les cas un grand merci à tous
Thurston
Hors ligne
#33 Le 15/08/2012, à 19:31
- pingouinux
Re : [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs
@ no_spleen #31 :
On n'a pas compris la même chose. Pour moi, on choisit d'abord les mots les plus longs, que les longueurs soient identiques ou non; ensuite seulement, s'il y en a de trop, on ne conserve que les premiers de la série de mots les plus courts (parmi les longs qui ont été choisis).
Tout ça n'est pas bien grave, l'essentiel étant que thurston ait eu une réponse à sa question. Il semble d'ailleurs qu'il y ait une suite.
Hors ligne
#34 Le 15/08/2012, à 20:08
- thurston
Re : [RESOLU] Reduire une phrase jusqu'à n mots avec les mots les + longs
désolé pour le manque de précision dans l'énoncé du pb posé. C'était la compréhension de pingouinux qui refletait ma pensée.
J'espère que la partie 2 (autre post) est claire car pas forcément simple à expliquer.
Le but ultime de tout ca, c'est de pouvoir reconnaitre avec 5 char un artiste.
Sonic Youth ca donne S.Yo avec 4, et c'est bien différent de Dinosaur.Jr qui donne lui D.Jr (quand n_char est pair), je donne plus au 2ème...
A l'utilisation sur un petit mp3 de ce type MP30WOM (Mpman), c'est redoutable au niveau efficacité, malgré la non gestion des tag (pas cher!!! pas d'ID3-Tag). le lecteur 10 euros, une carte de 32Go uSD, et zou. Pas lecture ni synchro des 32Go gagné, à condition de pouvoir naviguer dans les folders
A+, merci à tous
T.
Hors ligne