From d74578c804df4053dec45c23e20369978a390dae Mon Sep 17 00:00:00 2001 From: Morgan Date: Sat, 4 Jul 2015 01:46:21 +0000 Subject: DRY up pages definition using minimum-unambiguous-path closes #16 (woo big negative line-count commit thanks @duckinator!) --- src/pronouns/util.clj | 34 +++++----------------------------- 1 file changed, 5 insertions(+), 29 deletions(-) (limited to 'src/pronouns/util.clj') diff --git a/src/pronouns/util.clj b/src/pronouns/util.clj index 9a7d886..4d4f928 100644 --- a/src/pronouns/util.clj +++ b/src/pronouns/util.clj @@ -15,35 +15,6 @@ [query-key tabfile] (table-lookup query-key (slurp-tabfile tabfile))) -(defn disambiguate - "given a row and its lexically-closest neighbors, - determine the smallest abbreviation which is still - distinct." - [prev row next] - (loop [n 1] - (let [row-n (take n row)] - (cond - (>= n 5) row - (= row-n (take n prev)) (recur (+ n 1)) - (= row-n (take n next)) (recur (+ n 1)) - :else row-n)))) - -(defn abbreviate - "given a list of pronoun rows, return a list of - pairs, where the first item is the abbreviation - and the second is the original pronoun row." - [sorted-table] - (loop [acc nil - prev nil - row (first sorted-table) - todo (rest sorted-table)] - (let [next (first todo) - abbrev (disambiguate prev row next) - pair (list abbrev row) - acc2 (conj acc pair)] - (if (empty? todo) (reverse acc2) - (recur acc2 row next (rest todo)))))) - (defn minimum-unambiguous-path ([pronouns-table sections] (minimum-unambiguous-path pronouns-table sections 1)) ([pronouns-table sections number-of-sections] @@ -53,3 +24,8 @@ 0 nil 1 (clojure.string/join "/" sections-subset) (recur pronouns-table sections (+ number-of-sections 1)))))) + +(defn abbreviate + "given a list of pronoun rows, return a list of minimum unabiguous paths" + [pronouns-table] + (map (partial minimum-unambiguous-path pronouns-table) pronouns-table)) -- cgit