#!/usr/bin/perl # wordcloud.pl - given a hash of words and numbers, output a rudimentary word cloud # Eric Lease Morgan # August 25, 2008 - first cut; based on Infomotions Gallery word cloud # require use strict; # initialize my %database = {}; $database{ 'scout' } = 368; $database{ 'heyward' } = 339; $database{ 'though' } = 324; $database{ 'duncan' } = 301; $database{ 'uncas' } = 244; $database{ 'little' } = 239; $database{ 'without' } = 238; $database{ 'own' } = 237; $database{ 'eyes' } = 235; $database{ 'before' } = 217; $database{ 'indian' } = 205; $database{ 'hawkeye' } = 205; $database{ 'young' } = 204; $database{ 'magua' } = 189; $database{ 'much' } = 185; $database{ 'place' } = 184; $database{ 'long' } = 178; $database{ 'time' } = 170; $database{ 'moment' } = 164; $database{ 'hand' } = 161; $database{ 'cora' } = 161; $database{ 'again' } = 154; $database{ 'after' } = 153; $database{ 'head' } = 152; $database{ 'returned' } = 150; $database{ 'among' } = 149; $database{ 'most' } = 145; $database{ 'huron' } = 144; $database{ 'air' } = 144; $database{ 'toward' } = 143; $database{ 'well' } = 140; $database{ 'few' } = 138; $database{ 'seen' } = 132; $database{ 'many' } = 130; $database{ 'found' } = 127; $database{ 'manner' } = 126; $database{ 'alice' } = 126; $database{ 'voice' } = 125; $database{ 'hurons' } = 125; $database{ 'david' } = 125; $database{ 'see' } = 124; $database{ 'chief' } = 124; $database{ 'words' } = 123; $database{ 'about' } = 122; $database{ 'woods' } = 121; $database{ 'never' } = 121; $database{ 'know' } = 121; $database{ 'great' } = 120; $database{ 'rifle' } = 119; $database{ 'here' } = 118; $database{ 'until' } = 114; $database{ 'soon' } = 113; $database{ 'left' } = 113; $database{ 'just' } = 113; $database{ 'white' } = 112; $database{ 'heard' } = 111; $database{ 'look' } = 110; $database{ 'father' } = 110; $database{ 'yet' } = 109; $database{ 'side' } = 109; $database{ 'savage' } = 109; $database{ 'eye' } = 109; $database{ 'first' } = 108; $database{ 'already' } = 108; $database{ 'whole' } = 107; $database{ 'party' } = 105; $database{ 'delawares' } = 104; $database{ 'light' } = 102; $database{ 'enemy' } = 102; $database{ 'within' } = 101; $database{ 'water' } = 101; $database{ 'warrior' } = 101; $database{ 'continued' } = 101; $database{ 'seemed' } = 100; $database{ 'low' } = 100; $database{ 'appeared' } = 100; $database{ 'turned' } = 99; $database{ 'once' } = 98; $database{ 'same' } = 96; $database{ 'must' } = 95; $database{ 'dark' } = 95; $database{ 'short' } = 93; $database{ 'passed' } = 93; $database{ 'friend' } = 92; $database{ 'back' } = 91; $database{ 'instant' } = 90; $database{ 'project' } = 88; $database{ 'people' } = 87; $database{ 'around' } = 87; $database{ 'way' } = 86; $database{ 'enemies' } = 86; $database{ 'between' } = 86; $database{ 'against' } = 86; $database{ 'form' } = 85; $database{ 'munro' } = 84; $database{ 'warriors' } = 83; $database{ 'stood' } = 83; $database{ 'nor' } = 83; $database{ 'feet' } = 83; $database{ 'far' } = 83; # do the work, and sent it to stdout print &build_cloud( 'rank' ); # the hard part sub build_cloud { # get the input my $sortby = shift; if ( ! $sortby ) { $sortby = 'rank' } # initialize my %queries; my $pointer = 99; my $html; my %alpha_list; my %seen; # invert the hash foreach ( sort keys %database ) { push( @{ $queries{ $database{ $_ } } }, $_ ) } # loop through the sorted values foreach my $value ( sort { $b <=> $a } values %database ) { # get the key for each value foreach my $key ( @{ $queries{ $value } } ) { # check to see if it exists if ( ! $seen{ $key } ) { # increment $seen{ $key }++; # branch according to sorty by if ( $sortby eq 'rank' ) { # calculate the font size my $font_size = $pointer + 75; # build the return value my $query = uc( $key ); $query =~ s/ /\+/g; $html .= "$key  "; } # cache the query else { $alpha_list{ $key } = $pointer; } $pointer--; } last if ( $pointer <= 1 ) } } if ( $sortby eq 'alpha' ) { foreach my $key ( sort keys %alpha_list ) { my $query = uc( $key ); $query =~ s/ /%20/g; my $font_size = $alpha_list{ $key } + 75 ; $key =~ s/ / /g; $html .= "$key  "; } } # done return $html; }