2011-07-22 8 views
5

hashrefs Text::Ngram का उपयोग करते हुए मैंअपसंदर्भन पर्ल

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

जो काम नहीं करता है (Scalar found where operator expected) है। मुझे लगता है कि यह जानने का एक संयोजन है कि मैं क्या कर रहा हूं (अभी भी पर्ल के साथ बहुत अच्छा नहीं है) और पाठ :: Ngram से आउटपुट के रूप में मुझे वास्तव में क्या मिल रहा है इसके बारे में भ्रमित किया जा रहा है। मदद? मैं तो बस उत्पन्न एन-ग्राम को देखने के लिए चाहते हैं:

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

संपादित करें: मेरी हिस्सा है, धन्यवाद सब पर बेवकूफ त्रुटि।

उत्तर

12

हैश संदर्भ भिन्नता के लिए घुंघराले ब्रेसिज़ उपयोग:

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

और आप शायद ASCII-betical cmp छँटाई के बजाय संख्यात्मक छंटाई के लिए <=> उपयोग करना चाहते हैं।

6

उपयोग घुंघराले ब्रेसिज़:

my %ct = %{ $c }; 
0

क्या आप इसे आजमाएंगे?

my $c = ngram_counts({}, $text, 3); 
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 देखें।