Given the input text file, the program should write to disk a ranking
of words sorted by frequency, like:
the : 52483
and : 32558
of : 23477
a : 22486
to : 21993
My first implementation:
(defn topwords [in-filepath, out-filepath]
(def words (.split (.toLowerCase (slurp in-filepath)) "\\s+"))
(spit out-filepath
(apply str
(concat
(map (fn [pair] (format "%20s : %5d \r\n" (key pair)
(val pair)))
(sort-by #( -(val %) )
(reduce
(fn [counted-words word]
( assoc counted-words
word
(inc (get counted-words
word 0)) ))
{}
words)))
["\r\n"]))))
Somehow I feel it's far from optimal. Could you please advise and
improve? What is the best, idiomatic implementation of this simple
problem?
regards,
Piotrek
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---