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