iva*_*lan 1 perl hash tagging nlp
我有一个函数可以计算文本中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 = ("<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]"}++;
}
}
Run Code Online (Sandbox Code Playgroud)
我不理解的特定代码点如下:
1)$ngramfreq[3]
哈希上的索引在这里意味着什么?我是否分别计算每个标签?它是钥匙的长度吗?什么是我的结束键(3个不同的标签键?)?
2) $i<=$#tag
是什么$#在Perl是什么意思?
有一段时间没有使用Perl,所以我希望Perl Monks会帮助我.
[0]是一个数组索引,与哈希无关.这意味着它ngramfreq实际上是一个哈希数组:
my @ngramfreq = (
{ tag => 1, fish => 3 },
{ anothertag => 4 }
);
Run Code Online (Sandbox Code Playgroud)
从而$ngramfreq[0]获得第一个anon哈希,然后你可以访问标签.
$#tag是数组中的最后一个索引@tag.因此,对于3个元素,它将是2,因为数组指示是0,1,2
Data::Dumper 是一种可视化结构的好方法,让您了解它是如何布局的.
perldoc perldsc 值得一读,因为它扩展了数据结构.