
Untitled
By: a guest on
May 11th, 2012 | syntax:
None | size: 0.98 KB | hits: 13 | expires: Never
(ns freq.core
(:import (java.io BufferedReader FileReader))
(:require [clojure.string :as string]))
(defn read-file-lazy
"Opens a file and creates a lazy-sequence to read each line"
[file-name]
(with-open [reader (BufferedReader. (FileReader. file-name))]
(line-seq reader)))
(defn read-file
"Reads a file using slurp"
[file-name]
(slurp file-name))
(defn read-words
"returns the words in a file"
[file-name]
(string/split (read-file file-name) #"[ \n]"))
(defn update-frequencies
"Update frequency of the word"
[frequency-map word]
(if (contains? frequency-map word)
(update-in frequency-map [word] inc)
(assoc frequency-map word 1)))
(defn calculate-word-frequencies
"Given a sequence of words spits out frequency map of each word"
[words]
(reduce update-frequencies (sorted-map) words))
(defn top-words
"Get top 10 frequent words from file"
[file-name]
(take 10 (reverse (sort-by last (calculate-word-frequencies (read-words file-name))))))