From: Todd Benson Date: 2008-12-18T08:27:25+09:00 Subject: Re: Your word frequency calculator? On Wed, Dec 17, 2008 at 1:42 AM, C. Pohjanraito wrote: > Hi! I am studying various texts and code. > > Word frequency calculator is one basic tool. I find it an interesting, > elementary problem to solve. > > I found this word frequency analyser by William James: > > freq = Hash.new(0) > loop { > data = (STDIN.read(4095) or break) + (STDIN.gets || "") > for word in data.downcase!.tr!('^a-z',' ').split > freq[word] += 1 > end > } > > print freq.to_a.map{|x| sprintf("%7d %s\n",x[1],x[0])}.sort.reverse > > > Whats yours like? With 1.8.7 and s being data (includes apostrophes for words like "don't")... p (a=s.downcase.tr('^a-z\'',' ').split).uniq.inject(Hash.new(0)){|h,i|h[i]=a.count(i);h} ...of course leaving off #uniq and just doing +=1 instead of #count would be shorter, but I like the concept behind this one instead :-) Todd