That's strange. I'm getting the expected output for that input:
trigram frequencies in your text:
hai!howare 1
howareyou? 1
areyou?will 1
you?willyou 1
willyoucome 1
youcometo 1
cometoCanada 2
toCanadathis 2
Canadathisweekend? 1
thisweekend?hai! 1
weekend?hai!Hello! 1
hai!Hello!I 1
Hello!Iam 1
Iamfine. 1
amfine.No 1
fine.NoI 1
NoIam 1
Iamnot 1
amnotcoming 1
notcomingto 1
comingtoCanada 1
Canadathisweekend. 1
thisweekend.I 1
weekend.Iwill 1
Iwillcome 1
willcometo 1
toCanadanext 1
Canadanextweek: 1
nextweek:I 1
week:Iwill 1
Iwillmeet 1
willmeetyou 1
meetyounext 1
younextmonth 1
nextmonthat 1
monthatCanada 1
This is from running your code with the minor change I suggested:
#!/usr/bin/env perl
use strict;
use warnings;
use autodie;
use feature 'say';
my @trigrams;
my @trigramfrequency;
my @words;
while (<DATA>) {
push @words, split /\s/;
}
for ( my $i = 0 ; $i < $#words - 1 ; $i++ ) {
my $trigram = $words[$i] . $words[ $i + 1 ] . $words[ $i + 2 ];
my $found = -1;
if (@trigrams) {
SEARCHtrigramINDEX:
for ( my $index = 0 ; $index <= $#trigrams ; $index++ ) {
if ( $trigrams[$index] eq $trigram ) {
$found = $index;
last SEARCHtrigramINDEX;
}
}
}
if ( $found > -1 ) {
$trigramfrequency[$found]++;
}
else {
push @trigrams, $trigram;
$trigramfrequency[$#trigrams]++;
}
}
print "trigram frequencies in your text:\n";
for ( my $index = 0 ; $index <= @trigrams ; $index++ ) {
print "$trigrams[$index] $trigramfrequency[$index]\n";
}
__DATA__
hai! how are you?
will you come to Canada this weekend?
hai! Hello! I am fine.
No I am not coming to Canada this weekend.
I will come to Canada next week:
I will meet you next month at Canada
|