2017-02-18 64 views
0

我解析一个文本文件,并将单词存储为一个散列中的键。每个键都有一个数组作为其值,并将该单词出现在文本中的次数作为第一个值,并将该单词的概率作为数组中的第二个值。如何在哈希中访问数组中的元素?

例子:

my %ngram = (
    "word"=>("how many this word appear in text"," probability of this word") 
); 

我怎样才能哈希内访问或获取阵列的价值?我发布了我用来完成这个任务的代码;我试着打印出这些值,但是它打印出为零,你看下面:

0 *** 0 
0 *** 0 

任何线索我怎么可以检索或访问这些值?

while (scalar @words > $inputs[0]) 
{ 
    $numerator="@words[0 .. $inputs[0]]"; 
    $denominator= "@words[0 .. ($inputs[0]-1)]"; 
    $nGram{$numerator}[0]=$nGram{$numerator}->[0]++; 
    $nGram{$denominator}++; 
    my $freq=$nGram{$numerator}->[0]/$nGram{$denominator}; 
    $nGram{$numerator}[1]=$freq; 
    print "$nGram{$numerator}->[0] *** $nGram{$numerator}->[1]"; 
    shift @words; 
} 

回答

2

Perl中的多级数据结构(如数组散列)不存储数组本身。它将参考存储到阵列。

my %ngrams = (
    $word => [$num, $probability] 
); 

注意[]而不是()。这使得数组引用。现在,您可以像其他任何东西一样获得价值。

my $value = $ngrams{$word}; 

$value是数组引用。你必须解除引用才能使用它。

my $probability = $value->[1]; 

您也可以一次性完成此操作。

my $probability = $ngrams{$word}[1]; 

你可以在Perl Reference Tutorial了解更多关于此。


但是更好的数据结构可能是散列哈希。

my %ngrams = (
    $word => { 
     appearances => $num, 
     probability => $probability, 
    } 
); 

现在,不必记住元素0是出现次数,元素1是概率,您可以通过名称引用它们。

my $probability = $ngram{$word}{probability};