2011-05-31 50 views
2

我想用Perl編寫一個程序,它應該返回文件中所有單詞的頻率和文件中每個單詞的長度(不是所有字符的總和! )從西班牙語文本中生成一條Zipf曲線(如果您不知道Zipf曲線是什麼,則不算什麼大問題)。現在我的問題是:我可以做的第一部分,我得到的所有字的頻率,但我不怎麼得到每個字的長度! :(我知道在命令行 $ word_length =長度($字),但試圖改變代碼後,我真的不知道我應該包括它,以及如何計算每個單詞的長度。用Perl編寫文本中每個單詞的字母

這是我的代碼看起來像,直到知道:

#!/usr/bin/perl 
use strict; 
use warnings; 

my %count_of; 
while (my $line = <>) { #read from file or STDIN 
    foreach my $word (split /\s+/gi, $line){ 
    $count_of{$word}++; 
    } 
} 
print "All words and their counts: \n"; 
for my $word (sort keys %count_of) { 
    print "$word: $count_of{$word}\n"; 
} 
__END__ 

我希望有人有任何建議

+0

的'gi'標誌:'分裂/ \ s + /,$ line' – toolic 2011-05-31 14:42:22

+0

你不妨檢查一下這個問題:http://stackoverflow.com/questions/6170985/counting-individual-單詞文本文件當你像你的文件一樣進行分割時,你最終會得到'單詞','單詞'和'單詞',它們都被視爲不同的單詞,這可能不是你想要的。 – TLP 2011-05-31 17:22:03

回答

1

如果要存儲單詞的長度,可以使用散列哈希。不需要

while (my $line = <>) { 
    foreach my $word (split /\s+/, $line) { 
     $count_of{$word}{word_count}++; 
     $count_of{$word}{word_length} = length($word); 
    } 
} 

print "All words and their counts and length: \n"; 
for my $word (sort keys %count_of) { 
    print "$word: $count_of{$word}{word_count} "; 
    print "Length of the word:$count_of{$word}{word_length}\n"; 
} 
+0

這是一個好主意,謝謝 – 2011-06-02 12:40:06

1

這將打印旁邊的計數長度:

print "$word: $count_of{$word} ", length($word), "\n"; 
+1

哦,謝謝你的快速回答!它工作正常。我是這樣寫的: print $ word,「\ t」,$ count_of {$ word},「\ t」,長度($ word),「\ n」; – 2011-05-31 17:36:29

0

只爲您的信息 - 其他的可能性

length length($word) 

可能是:

$word =~ s/(\w)/$1/g 

這是不清晰的解決方案爲toolic,但可以給你在這個問題上其他視圖(TIMTOWTDI :))

小解釋:

\ W修改通過小號///

小號

$ 1可防止覆蓋原始$字每一個字母匹配您的$字///返回字母數(與\ w匹配)$ word

+1

你的意思是'$ count = $ word =〜s /(\ w)// g;'會得到字母的個數。 ;) – TLP 2011-05-31 17:18:54

+0

好,好的,我也會試試,謝謝。 – 2011-05-31 17:37:51

+0

@TLP:選中此項: 'my $ word =「word」; 打印$字=〜S /(\ W)/ $ 1 /克;' 輸出是: '7' 沒有** $ 1 **,你將覆蓋** $字**與許多計算字母。 – czubatka 2011-05-31 19:33:59

相關問題