2016-01-09 73 views
1

我有一個函數可以計算文本中Trigrams的頻率。沒有計算語言學知識,我只需要Perl代碼的幫助。哈希(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能幫助我。

+1

您可能需要分別檢查哈希數組http://perldoc.perl.org/perldsc.html#ARRAYS-OF-HASHES和http://perlmaven.com/perl-arrays。 –

+1

我將'use Data :: Dumper;'添加到您的腳本的開頭,並在'print Dumper \ @ ngramfreq'中查看您的數據結構 – fugu

+3

如果您想要Perl Monks的答案,請轉至http://www.perlmonks。 org :-) – choroba

回答

5

[0]是一個數組索引,與散列無關。這意味着ngramfreq實際上是散列的數組:

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

並由此$ngramfreq[0]讓你第一匿名哈希,然後你就可以訪問標記。

$#tag是數組@tag中的最後一個索引。因此,有3個元素,它將是2,因爲數組顯示是0,1,2

Data::Dumper是一種可視化結構的好方法,讓您瞭解它是如何佈局的。

perldoc perldsc值得一讀,因爲它擴展了數據結構。