2011-07-22 26 views
5

Sử dụng Text::Ngram Tôi códereferencing Perl hashrefs

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

mà không làm việc (Scalar found where operator expected). Tôi nghĩ rằng đây là một sự kết hợp của không biết những gì tôi đang làm (vẫn không phải là rất tốt với Perl) và bị nhầm lẫn về những gì chính xác tôi nhận được như đầu ra từ Text :: Ngram. Cứu giúp? Tôi chỉ muốn xem các n-grams đã tạo:

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

Chỉnh sửa: Lỗi ngu ngốc một phần, cảm ơn tất cả mọi người.

Trả lời

12

Sử dụng dấu ngoặc nhọn để dereference tham chiếu băm:

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

Và có thể bạn muốn sử dụng <=> cho phân loại số thay vì ASCII-betical sắp xếp cmp.

6

Sử dụng dấu ngoặc nhọn:

my %ct = %{ $c }; 
0

Bạn có thử không?

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

Không cần sao chép vào một mã băm khác, chỉ cần sử dụng tham chiếu.

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

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

Xem http://perlmonks.org/?node=References+quick+reference để biết một số quy tắc dễ nhớ để xử lý tài liệu tham khảo.

Các vấn đề liên quan