Toon posts:

[Perl] Probleem met hash

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een hash met daarin als keys woorden en als value het aantal keer dat dit woord in een bepaalde tekst voorkomt.
Ik wil nu graag de top 25 meest frequente woorden overhouden.
Hiervoor heb ik de hash gesorteerd met

code:
1
2
3
4
5
6
7
8
9
sub hashValueDescendingNum {
   $nounhash{$b} <=> $nounhash{$a};
}

print "\n\tGRADES IN DESCENDING NUMERIC ORDER:\n";
foreach $key (sort hashValueDescendingNum (keys(%nounhash))) 
{
print "\t\t$nounhash{$key} \t\t $key\n";
}


deze code. Ik krijg op deze manier een enorme lijst met bovenaan het meest frequente woord.
Heeft iemand een idee hoe ik nu vervolgens de 25 meest frequente woorden met de daarbijbehorende value (dus het aantal keer dat het woord voorkomt) overhou?
Ik wil dus graag een hash overhouden met als keys deze 25 woorden en als values het aantal keer dat het woord in de tekst voorkomt.

Het lukt me wel bijv d.m.v. een array alleen de top 25 woorden te krijgen, maar dan ben ik de values kwijt...

[ Voor 10% gewijzigd door Verwijderd op 08-06-2004 18:17 ]


Verwijderd

Verwijderd schreef op 08 juni 2004 @ 18:16:
Ik heb een hash met daarin als keys woorden en als value het aantal keer dat dit woord in een bepaalde tekst voorkomt.
Ik wil nu graag de top 25 meest frequente woorden overhouden.
Hiervoor heb ik de hash gesorteerd met

code:
1
2
3
4
5
6
7
8
9
sub hashValueDescendingNum {
   $nounhash{$b} <=> $nounhash{$a};
}

print "\n\tGRADES IN DESCENDING NUMERIC ORDER:\n";
foreach $key (sort hashValueDescendingNum (keys(%nounhash))) 
{
print "\t\t$nounhash{$key} \t\t $key\n";
}


deze code. Ik krijg op deze manier een enorme lijst met bovenaan het meest frequente woord.
Heeft iemand een idee hoe ik nu vervolgens de 25 meest frequente woorden met de daarbijbehorende value (dus het aantal keer dat het woord voorkomt) overhou?
Ik wil dus graag een hash overhouden met als keys deze 25 woorden en als values het aantal keer dat het woord in de tekst voorkomt.

Het lukt me wel bijv d.m.v. een array alleen de top 25 woorden te krijgen, maar dan ben ik de values kwijt...
Maak gewoon een nieuwe hash met alleen die benodigde waarden.
Zoiets?
code:
1
2
3
4
foreach $key ( ( sort {$nounhash{$b} <=> $nounhash{$a}} keys %nounhash )[0..24] )
{
    $top25hash{$key} = $nounhash{$key};
}

Verwijderd

Topicstarter
Hartstikke bedankt! Werkt prima!

Hier heb ik dus gewoon 4 uur lang op vastgezeten....... ;)