哈希(Multihash?)索引(Perl)

Hash (Multihash?) Indexing (Perl)

我有一个函数可以计算文本中八卦的出现频率。不需要计算语言学知识,我只需要 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高手帮帮我。

[0] 是一个数组索引,与散列无关。这意味着 ngramfreq 实际上是一个哈希数组:

my @ngramfreq = (
                     { tag => 1, fish => 3 },
                     { anothertag => 4 } 
                );

因此 $ngramfreq[0] 为您获取第一个匿名散列,然后您就可以访问该标签。

$#tag 是数组 @tag 中的最后一个索引。所以对于 3 个元素,它将是 2,因为数组索引是 0,1,2

Data::Dumper 是一种可视化结构的好方法,可以让您了解它的布局方式。

perldoc perldsc 值得一读,因为它扩展了数据结构。