単語の頻度を調べる
class String def words(pattern=/\w+/) hash = Hash.new(0) self.scan pattern do |w| hash[w] += 1 end hash end end s = <<"EOD" We wish you a Merry Christmas, We wish you a Merry Christmas, We wish you a Merry Christmas, and A Happy New Year! EOD s.words.each_pair do |key, value| puts "#{key} => #{value}" end
実行結果です。
New => 1 wish => 3 A => 1 and => 1 Merry => 3 a => 3 We => 3 Happy => 1 Christmas => 3 Year => 1 you => 3
何だかあまり頭を使わないで書いている。これで良いのかな。
引っかかったポイント:
- 最初hash[w]++としちゃった。
- 最初Hash.newとしていて、hash[w] += 1でひっかかった。キーが存在しないときにnilに1加えようとしてエラーになった。
追記: