Ruby

文字列中の単語と文字を数える

指定された文字列の単語数と一番多く出現するアルファベットとその出現回数を表示するプログラムです。変数lsの値は下記例中では省略していますので、適当な長文(英文)を代入して下さい。

count.rb
ls = <<EOF
Lolem ipsum ...
..(略)..
EOF

puts "Number of words: " + ls.split(" ").length.to_s

h = {}
("a".."z").each do |x|
  h[x] = ls.count(x)
  # puts "Number of '" + x + "': " + ls.count(x).to_s
end

h.sort_by { |k,v| v }.reverse[0,5].each do |v|
  puts v[0] + " = " + v[1].to_s
end

一つ目のeachブロックでコメントアウトされているのが、aからzまでの出現回数をシンプルに出力する例です。このプログラムでは、上述の課題を改良して、「出現頻度の多い順に並べたときの上位5つを表示」するように変更しています。メソッドチェーンが長いので、一つ一つの処理でどんなクラスが返ってきているのか確認しながら理解すると良いかと思います。

以下は実行例です。採用した文字列によって結果は変化します。

$ ruby count.rb
Number of words: 93
e = 44
t = 42
n = 37
a = 33
o = 32

参考URL