単語の出現頻度を調べる


rubyco(るびこ)の日記 - 単語の頻度を調べるSqueakSmalltalk で。 Smalltalk には、毎度お馴染みの Bag があるので、これを使うと便利です。というか、Bag が他に役立つ場面を思いつかんとです。

| string |
string := 'We wish you a Merry Christmas,
We wish you a Merry Christmas,
We wish you a Merry Christmas,
and A Happy New Year!'.

^ string subStrings asBag sortedCounts asArray
=> {3->'We'.
    3->'you'.
    3->'a'.
    3->'Christmas,'.
    3->'wish'.
    3->'Merry'.
    1->'and'.
    1->'A'.
    1->'Happy'.
    1->'Year!'.
    1->'New'}


Bag を使わずに、rubyco さんの Ruby 版の意訳っぽい版も。ハッシュは Smalltalk では「辞書(a Dictionary)」になります。デフォルト値は指定できないので、#at:ifAbsent: を使用。

| string dict |
string := 'We wish you a Merry Christmas,
We wish you a Merry Christmas,
We wish you a Merry Christmas,
and A Happy New Year!'.

dict := Dictionary new.
string subStrings do: [:word | dict at: word put: (dict at: word ifAbsent: [0]) + 1].

^ dict
=> a Dictionary(
   'A'->1
   'Christmas,'->3
   'Happy'->1
   'Merry'->3
   'New'->1
   'We'->3
   'Year!'->1
   'a'->3
   'and'->1
   'wish'->3
   'you'->3)