6

使用Text::Ngram我有

my $c = ngram_counts($text, 3);
my %ct = %($c);

这不起作用(Scalar found where operator expected)。我认为这是不知道自己在做什么(对 Perl 仍然不是很好)和对从 Text::Ngram 得到的输出感到困惑的组合。帮助?我只想看看生成的 n-gram:

my @keys = sort {$ct{$a} cmp $ct{$b} } keys %ct;
foreach my $k (@keys) {
    print "$k: $ct{$k}\n"
}

编辑:我的愚蠢错误,谢谢大家。

4

4 回答 4

16

使用花括号取消引用哈希引用:

my %ct = %{ $ct };  # %$ct would also work

您可能希望使用<=>数字排序而不是 ASCII-betical 排序cmp

于 2011-07-22T18:24:39.937 回答
7

使用花括号:

my %ct = %{ $c };
于 2011-07-22T18:23:02.163 回答
3

无需将副本复制到另一个哈希中,只需使用引用即可。

my $c = ngram_counts($text, 3);

my @keys = sort {$c->{$a} <=> $c->{$b} } keys %$c;
foreach my $k (@keys) {
    print "$k: $c->{$k}\n"
}

请参阅http://perlmonks.org/?node=References+quick+reference了解一些容易记住的处理引用的规则。

于 2011-07-22T18:41:29.907 回答
0

你会试试这个吗?

my $c = ngram_counts({}, $text, 3);
于 2011-07-22T18:25:05.627 回答