哈希(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
值得一读,因为它扩展了数据结构。
我有一个函数可以计算文本中八卦的出现频率。不需要计算语言学知识,我只需要 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
值得一读,因为它扩展了数据结构。