28 lines
852 B
Text
28 lines
852 B
Text
import "io" for File
|
|
import "./str" for Str
|
|
import "./sort" for Sort
|
|
import "./fmt" for Fmt
|
|
import "./pattern" for Pattern
|
|
|
|
var fileName = "135-0.txt"
|
|
var text = File.read(fileName).trimEnd()
|
|
var groups = {}
|
|
// match runs of A-z, a-z, 0-9 and any non-ASCII letters with code-points < 256
|
|
var p = Pattern.new("+1&w")
|
|
var lines = text.split("\n")
|
|
for (line in lines) {
|
|
var ms = p.findAll(line)
|
|
for (m in ms) {
|
|
var t = Str.lower(m.text)
|
|
groups[t] = groups.containsKey(t) ? groups[t] + 1 : 1
|
|
}
|
|
}
|
|
var keyVals = groups.toList
|
|
Sort.quick(keyVals, 0, keyVals.count - 1) { |i, j| (j.value - i.value).sign }
|
|
System.print("Rank Word Frequency")
|
|
System.print("==== ==== =========")
|
|
for (rank in 1..10) {
|
|
var word = keyVals[rank-1].key
|
|
var freq = keyVals[rank-1].value
|
|
Fmt.print("$2d $-4s $5d", rank, word, freq)
|
|
}
|