使用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"
}
编辑:我的愚蠢错误,谢谢大家。
答案 0 :(得分:13)
使用花括号取消引用哈希引用:
my %ct = %{ $ct }; # %$ct would also work
您可能希望使用<=>
进行数字排序,而不是使用ASCII-betical排序cmp
。
答案 1 :(得分:6)
使用花括号:
my %ct = %{ $c };
答案 2 :(得分: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,了解一些易于记忆的处理引用的规则。
答案 3 :(得分:0)
你会试试吗?
my $c = ngram_counts({}, $text, 3);