У меня есть функция, которая учитывает частоты триграмм в тексте. Не требуется знание вычислительной лингвистики, мне просто нужна помощь с кодом Perl.Hash (Multihash?) Индексирование (Perl)
Это функция:
sub extract_frequencies {
for(my $i=0; $i<=$#tag; $i++) {
$wordtagfreq{"$word[$i]\t$tag[$i]"}++;
$tagfreq{$tag[$i]}++;
}
# count Tag-Trigramm-Frequencies
my @start = ("<s>","<s>");
unshift @tag, @start; # korrigiert
push @tag, "<s>";
for(my $i=2; $i<=$#tag; $i++) {
$ngramfreq[3]{"$tag[$i-2]\t$tag[$i-1]\t$tag[$i]"}++;
}
}
Конкретная кодовые точки, которые я не понимаю, являются следующие:
1) $ngramfreq
[3]
Что индекс на хэш означает здесь? Я рассчитываю отдельно для каждого тега? Это длина ключа? Каков мой конечный ключ (3 разных ключа?)?
2) $i<=$#tag
Что $#
в Perl означает?
Не использовали Perl за некоторое время, поэтому я надеюсь, что некоторые Perl Monks помогут мне.
Возможно, вы захотите проверить массив хэшей http://perldoc.perl.org/perldsc.html#ARRAYS-OF-HASHES и http://perlmaven.com/perl-arrays соответственно. –
Я бы добавил 'use Data :: Dumper;' в начало вашего скрипта и 'print Dumper \ @ ngramfreq', чтобы увидеть вашу структуру данных. – fugu
Если вы хотите получить форму ответов Perl Monks, перейдите по адресу http: //www.perlmonks. org :-) – choroba