我有一个函数可以计算文本中Trigrams的频率.不需要计算语言学知识,我只需要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 = ("",""); unshift @tag, @start; # korrigiert push @tag, ""; 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会帮助我.
[0]
是一个数组索引,与哈希无关.这意味着它ngramfreq
实际上是一个哈希数组:
my @ngramfreq = ( { tag => 1, fish => 3 }, { anothertag => 4 } );
从而$ngramfreq[0]
获得第一个anon哈希,然后你可以访问标签.
$#tag
是数组中的最后一个索引@tag
.因此,对于3个元素,它将是2,因为数组指示是0,1,2
Data::Dumper
是一种可视化结构的好方法,让您了解它是如何布局的.
perldoc perldsc
值得一读,因为它扩展了数据结构.