use strict; use locale; my $fenetre = 3; my( @phrase, %cooc ); while (my $ligne = ) { chomp $ligne; my ( $forme, $etiquette, $lemme ) = split( /\t/, $ligne ); if ( $etiquette ne "SENT" ) { push ( @phrase, $forme ); } else { for ( my $i = 0; $i <= $#phrase; $i++ ) { my $pivot = lc( $phrase[$i] ); for ( my $j = $i-$fenetre; $j <= $i+$fenetre; $j++ ) { if ( ( $j >= 0 ) and ( $j <= $#phrase ) and ( $j != $i ) ) { my $cooccurrent = lc ($phrase[$j]); $cooc{$pivot}{$cooccurrent}++; } } } @phrase = (); } } foreach my $pivot ( sort keys %cooc ) { my %cooc_pivot = %{ $cooc{$pivot} }; foreach my $cooccurrent ( sort { $cooc_pivot{$b} <=> $cooc_pivot{$a} or $a cmp $b} keys %cooc_pivot ) { print $pivot, "\t", $cooccurrent, "\t", $cooc_pivot{$cooccurrent}, "\n"; } print "----------\n"; }