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ベティカルソートの代わりに、数値ソートに使用することをお勧めします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 に答える